react-duck
Advanced tools
Comparing version 0.3.0 to 0.4.0
@@ -43,5 +43,5 @@ "use strict"; | ||
var React = require("react"); | ||
var useGetter_1 = require("src/hooks/useGetter"); | ||
var actionTypes_1 = require("src/utils/actionTypes"); | ||
var createAction_1 = require("src/createAction"); | ||
var useGetter_1 = require("src/hooks/useGetter"); | ||
function Provider(_a) { | ||
@@ -48,0 +48,0 @@ var children = _a.children, Context = _a.Context; |
@@ -1,1 +0,1 @@ | ||
export declare function createContext<S, T extends string, P>(rootReducer: Reducer<S, T, P>, preloadedState: S, enhancer?: ContextEnhance<S, T, P>, displayName?: string): Context<S, T, P>; | ||
export declare function createContext<S, T extends string, P>(rootReducer: Reducer<S, T, P>, preloadedState: S, enhancer?: ContextEnhance<S, T, P>, displayName?: string, global?: boolean): Context<S, T, P>; |
@@ -6,2 +6,3 @@ "use strict"; | ||
var symbolObservable_1 = require("./utils/symbolObservable"); | ||
var Context_1 = require("./components/Context"); | ||
function createUnimplemented(objectName) { | ||
@@ -15,4 +16,5 @@ var prefix = objectName ? objectName + "." : ""; | ||
} | ||
function createContext(rootReducer, preloadedState, enhancer, displayName) { | ||
function createContext(rootReducer, preloadedState, enhancer, displayName, global) { | ||
var _a; | ||
if (global === void 0) { global = false; } | ||
var unimplemented = createUnimplemented("Context(" + (displayName !== null && displayName !== void 0 ? displayName : "") + ")"); | ||
@@ -31,4 +33,7 @@ var Context = React.createContext((_a = { | ||
} | ||
if (global) { | ||
Context_1.setGlobalContext(Context); | ||
} | ||
return Context; | ||
} | ||
exports.createContext = createContext; |
@@ -16,2 +16,3 @@ "use strict"; | ||
var combineReducers_1 = require("./utils/combineReducers"); | ||
var combineSelectors_1 = require("./utils/combineSelectors"); | ||
function createRootDuck() { | ||
@@ -36,3 +37,3 @@ var e_1, _a; | ||
rootDuck.initialState[duckName] = duck.initialState; | ||
rootDuck.selectors[duckName] = duck.selectors; | ||
rootDuck.selectors[duckName] = combineSelectors_1.combineSelectors(duckName, duck.selectors); | ||
reducerMapping[duckName] = duck.reducer; | ||
@@ -39,0 +40,0 @@ } |
@@ -0,1 +1,2 @@ | ||
export { GlobalContext } from "./components/Context"; | ||
export { Provider } from "./components/Provider"; | ||
@@ -9,1 +10,3 @@ export { applyMiddleware } from "./utils/applyMiddleware"; | ||
export { createRootProvider } from "./createRootProvider"; | ||
export { useDispatch } from "./hooks/useDispatch"; | ||
export { useSelector } from "./hooks/useSelector"; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var Context_1 = require("./components/Context"); | ||
Object.defineProperty(exports, "GlobalContext", { enumerable: true, get: function () { return Context_1.GlobalContext; } }); | ||
var Provider_1 = require("./components/Provider"); | ||
@@ -19,1 +21,5 @@ Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } }); | ||
Object.defineProperty(exports, "createRootProvider", { enumerable: true, get: function () { return createRootProvider_1.createRootProvider; } }); | ||
var useDispatch_1 = require("./hooks/useDispatch"); | ||
Object.defineProperty(exports, "useDispatch", { enumerable: true, get: function () { return useDispatch_1.useDispatch; } }); | ||
var useSelector_1 = require("./hooks/useSelector"); | ||
Object.defineProperty(exports, "useSelector", { enumerable: true, get: function () { return useSelector_1.useSelector; } }); |
{ | ||
"name": "react-duck", | ||
"version": "0.3.0", | ||
"version": "0.4.0", | ||
"description": "🦆 React ducks without Redux", | ||
@@ -5,0 +5,0 @@ "author": "iamogbz", |
@@ -42,8 +42,11 @@ # React Duck | ||
"ContextName", | ||
enhancer | ||
enhancer, | ||
useAsGlobalContext | ||
); | ||
``` | ||
**Note:** The enhancer may be optionally specified to enhance the context with third-party capabilities such as middleware, time travel, persistence, etc. The only context enhancer that ships with Ducks is [applyMiddleware](#applyMiddlewaremiddlewares). | ||
**Note**: The `enhancer` may be optionally specified to enhance the context with third-party capabilities such as middleware, time travel, persistence, etc. The only context enhancer that ships with Ducks is [applyMiddleware](#applyMiddlewaremiddlewares). | ||
**Note**: The `useAsGlobalContext` i.e. `global` option; allows for setting a default context that is used by the [`useDispatch`](#useDispatchactionCreatorContext) and [`useSelector`](#useSelectorselectorContext) hooks when no `Context` is supplied. This is useful when creating the context that will be used with the root provider. | ||
Use the state and actions in your component. | ||
@@ -55,2 +58,3 @@ | ||
const { state, dispatch } = React.useContext(Context); | ||
const count = state[counterDuck.name]; | ||
const increment = React.useCallback( | ||
@@ -62,3 +66,3 @@ () => dispatch(counterDuck.actions.increment()), | ||
<div> | ||
Count: <span>{state[counterDuck.name]}</span> | ||
Count: <span>{count}</span> | ||
<button onClick={increment} /> | ||
@@ -70,6 +74,16 @@ </div> | ||
**Note**: this is equivalent to the class component described below. | ||
**Note**: The use of `React.useContext` can be replaced with a combination of [`useDispatch`](#useDispatchactionCreatorContext) and [`useSelector`](#useSelectorselectorContext) hooks. | ||
```jsx | ||
// app.jsx | ||
... | ||
const count = useSelector(state => state[counterDuck.name], Context); | ||
const increment = useDispatch(counterDuck.actions.increment, Context); | ||
... | ||
``` | ||
**Note**: This is equivalent to the class component described below. | ||
```jsx | ||
// app.jsx | ||
export default class App extends React.PureComponent { | ||
@@ -162,3 +176,2 @@ static contextType = Context; | ||
- Implement slice selectors and `useSelector` hook, [reference][react-redux-useselector] | ||
- Implement observable pattern for context value, [reference][proposal-observable] | ||
@@ -174,3 +187,2 @@ | ||
[react-redux-tutorial]: https://react-redux.js.org/introduction/basic-tutorial | ||
[react-redux-useselector]: https://react-redux.js.org/api/hooks#useselector | ||
[redux-applymiddleware]: https://redux.js.org/api/applymiddleware#applymiddlewaremiddleware |
43205
44
784
183