如何将初始状态传递给我的Reducer?

时间:2017-05-25 04:28:55

标签: reactjs redux react-redux

我有以下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和我的应用程序?

1 个答案:

答案 0 :(得分:2)

您可以将初始状态作为createStore的第二个参数传递:

  

createStore(reducer, [preloadedState], [enhancer])

     
      
  1. [preloadedState] (any):初始状态。您可以选择将其指定为在通用应用程序中从服务器中保持状态,或者还原以前序列化的用户会话。如果您使用reducer生成combineReducers,则它必须是一个普通对象,其形状与传递给它的键相同。否则,您可以自由地传递减速器可以理解的任何内容。
  2.   

我个人建议为每个减速器设置初始状态,特定于减速器。例如,在Todo应用程序中:

const initialState = [
    { text: "This is a todo!", completed: false }
];

function todos(state = initialState, action) {
    ...
}

在这里,todos缩减器只知道它的某些"切片"国家,而不是整个申请状态。它只知道一系列待办事项,而不是状态中的其他东西。虽然,在这种情况下,这可能是不可能的