Use an Immutable Record as the root state (#25584)
parent
9934949fc4
commit
78ba12f0bf
|
@ -1,3 +1,5 @@
|
|||
import { Record as ImmutableRecord } from 'immutable';
|
||||
|
||||
import { loadingBarReducer } from 'react-redux-loading-bar';
|
||||
import { combineReducers } from 'redux-immutable';
|
||||
|
||||
|
@ -88,6 +90,22 @@ const reducers = {
|
|||
followed_tags,
|
||||
};
|
||||
|
||||
const rootReducer = combineReducers(reducers);
|
||||
// We want the root state to be an ImmutableRecord, which is an object with a defined list of keys,
|
||||
// so it is properly typed and keys can be accessed using `state.<key>` syntax.
|
||||
// This will allow an easy conversion to a plain object once we no longer call `get` or `getIn` on the root state
|
||||
|
||||
// By default with `combineReducers` it is a Collection, so we provide our own implementation to get a Record
|
||||
const initialRootState = Object.fromEntries(
|
||||
Object.entries(reducers).map(([name, reducer]) => [
|
||||
name,
|
||||
reducer(undefined, {
|
||||
// empty action
|
||||
}),
|
||||
])
|
||||
);
|
||||
|
||||
const RootStateRecord = ImmutableRecord(initialRootState, 'RootState');
|
||||
|
||||
const rootReducer = combineReducers(reducers, RootStateRecord);
|
||||
|
||||
export { rootReducer };
|
||||
|
|
Reference in New Issue