我有以下react-redux商店:
let store;
const initStore = ({onRehydrationComplete}) => {
store = createStore(
combineReducers({
...reactDeviseReducers,
form: formReducer,
router: routerReducer,
apollo: apolloClient.reducer(),
cats
}),
{},
compose(
applyMiddleware(
thunk,
routerMiddleware(history),
apolloClient.middleware()
),
autoRehydrate(),
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
)
);
persistStore(store, {
blacklist: [
'form'
]
}, onRehydrationComplete);
return store;
};
如何将初始状态传递给reducer和我的应用程序?
答案 0 :(得分:2)
您可以将初始状态作为createStore
的第二个参数传递:
createStore(reducer, [preloadedState], [enhancer])
- [
醇>preloadedState
] (any):初始状态。您可以选择将其指定为在通用应用程序中从服务器中保持状态,或者还原以前序列化的用户会话。如果您使用reducer
生成combineReducers
,则它必须是一个普通对象,其形状与传递给它的键相同。否则,您可以自由地传递减速器可以理解的任何内容。
我个人建议为每个减速器设置初始状态,特定于减速器。例如,在Todo应用程序中:
const initialState = [
{ text: "This is a todo!", completed: false }
];
function todos(state = initialState, action) {
...
}
在这里,todos
缩减器只知道它的某些"切片"国家,而不是整个申请状态。它只知道一系列待办事项,而不是状态中的其他东西。虽然,在这种情况下,这可能是不可能的