Skip to content

Commit 8d1ff2e

Browse files
authored
Update README.md
1 parent ce0d968 commit 8d1ff2e

File tree

1 file changed

+39
-46
lines changed

1 file changed

+39
-46
lines changed

README.md

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -8,87 +8,83 @@
88
[![Bundlephobia](https://badgen.net/bundlephobia/minzip/create-global-state-selector)](https://bundlephobia.com/result?p=create-global-state-selector)
99

1010

11+
1112
Create global state selectors from local redux slice selectors.
12-
In `redux` each of the slices are autonomus and final store structure is defined by how the individual slices are merged with `combineReducers` . `createGlobalStateSelector` takes local slice selectors and the slice structure to return global state selectors.
13+
In `redux` each of the slices is autonomous and the final store structure is defined by how the individual slices are merged with `combineReducers`. `createGlobalStateSelector` takes local slice selectors and the slice structure to return global state selectors.
1314

1415
## Install
1516

1617
npm i create-global-state-selector
1718

1819
## Uses
19-
The example below uses `redux-toolkit` however you can use `createGlobalStateSelector` with any standard Flux pattern that has multiple independent stores / slices, and are merged together with `combineReducers`.
20-
20+
The example below uses `redux-toolkit` however you can use `createGlobalStateSelector` with any standard Flux pattern that has multiple independent stores/slices, and are merged together with `combineReducers`.
21+
22+
2123
// personalDetailsSlice.js
2224

2325
import { createSlice } from '@reduxjs/toolkit';
2426
import createGlobalStateSelector from 'create-global-state-selector';
2527

26-
const sliceKey = 'personalDetails';
28+
export const sliceKey = 'personalDetails';
2729
const initialState = {
2830
name: 'Ashish',
2931
age: '26',
30-
isEligibleToDrink: true,
32+
isEligibleToDrink: true
3133
};
32-
34+
3335
const { actions, reducer } = createSlice({
3436
name: sliceKey,
3537
initialState,
3638
reducers: {
37-
setName(state, {payload}) {
39+
setName(state, { payload }) {
3840
state.name = payload;
3941
},
40-
setAge(state, {payload}) {
42+
setAge(state, { payload }) {
4143
state.age = payload;
4244
},
43-
setIsEligibleToDrink(state) {
45+
setDrinkingEligibilityBasedOnAge(state) {
4446
state.isEligibleToDrink = selectLocalAge(state) >= 18;
4547
}
46-
},
48+
}
4749
});
4850

4951
function selectLocalName(state) {
5052
return state.name;
51-
}
53+
}
5254
function selectLocalAge(state) {
5355
return state.age;
54-
}
56+
}
5557
function selectLocalIsEligibleToDrink(state) {
5658
return state.isEligibleToDrink;
57-
}
59+
}
5860

59-
export default reducer;
60-
export const { increment, decrement } = actions;
61-
export sliceKey;
61+
export default reducer;
62+
export const { setName, setAge, setDrinkingEligibilityBasedOnAge } = actions;
6263

63-
export const {
64-
selectName,
65-
selectAge,
66-
selectIsEligibleToDrink
67-
} = createGlobalStateSelector(
64+
export const { selectName, selectAge, selectIsEligibleToDrink } = createGlobalStateSelector(
6865
{
6966
selectName: selectLocalName,
7067
selectAge: selectLocalAge,
71-
selectIsEligibleToDrink: selectLocalIsEligibleToDrink,
72-
},
73-
personalDetailsSliceKey,
68+
selectIsEligibleToDrink: selectLocalIsEligibleToDrink
69+
},
70+
sliceKey
7471
);
7572

7673
// Global selectors created from local slice selectors
7774
// final store structure: state = { [sliceKey] : { name: 'Ashish', age: 26 } }
7875
// selectName(state) // 'Ashish'
7976
// selectAge(state) // 26
80-
8177

8278
---
8379
// store.js
80+
81+
import { createStore, combineReducers } from 'redux';
82+
import personalDetailsReducer, { sliceKey as personalDetailsSliceKey } from './personalDetailsSlice';
8483

85-
import { createStore, combineReducers } from 'redux';
86-
import personalDetailsReducer, { sliceKey as personalDetailsSliceKey } from personalDetailsSlice;
87-
88-
const reducer = combineReducers({
89-
[personalDetailsSliceKey]: personalDetailsReducer,
84+
const reducer = combineReducers({
85+
[personalDetailsSliceKey]: personalDetailsReducer
9086
});
91-
const store = createStore(reducer);
87+
const store = createStore(reducer);
9288
// { personalDetails : { name: 'Ashish', age: '26', isEligibleToDrink: true } }
9389

9490
export default store;
@@ -107,36 +103,33 @@ The example below uses `redux-toolkit` however you can use `createGlobalStateSel
107103
{
108104
selectX: (state: Record<string, any>): number => state.x,
109105
selectY: (state: Record<string, any>): number => state.y,
110-
selectZ: (state: Record<string, any>): string => state.z,
106+
selectZ: (state: Record<string, any>): string => state.z
111107
},
112108
'a',
113109
'b'
114110
);
115-
111+
116112
// Final store signature after combineReducers
117-
const store = { a: { b: { x: 55, y: 65, z: 'temp' } } };
113+
const store = { a: { b: { x: 55, y: 65, z: 'temp' } } };
118114

119-
selectX(store) // 55
120-
selectY(store) // 65
121-
selectZ(store) // 'temp'
115+
selectX(store); // 55
116+
selectY(store); // 65
117+
selectZ(store); // 'temp'
122118

123119
### Pass a local slice selector
124120

125-
const selectZ = createGlobalStateSelector(
126-
(state: Record<string, any>): number => state.z,
127-
'a',
128-
'b'
129-
);
130-
121+
const selectZ = createGlobalStateSelector((state: Record<string, any>): number => state.z, 'a', 'b');
122+
131123
// Final store signature after combineReducers
132-
const store = { a: { b: { x: 55, y: 65, z: 'temp' } } };
124+
const store = { a: { b: { x: 55, y: 65, z: 'temp' } } };
133125

134-
selectZ(store) // 'temp'
126+
selectZ(store); // 'temp'
135127

136128
## FYI
137-
`createGlobalStateSelector` uses `Object.fromEntries` and `Object.entries` which are not pollyfilled to reduce the package size. If needed, Please add your own polyfills, or target your polyfills accordingly for Babel, Webpack, Rollup etc.
129+
`createGlobalStateSelector` uses `Object.fromEntries` and `Object.entries` which are not pollyfilled to reduce the package size. If needed, please add your own polyfills, or target your polyfills accordingly for Babel, Webpack, Rollup, etc.
138130

139131

140132
## License
141133

142134
MIT
135+

0 commit comments

Comments
 (0)