我正在使用redux,将多个reducer组合成rootReducer
。如何从另一个减速器修改一个减速器的状态?例如:
// systemReducer.js
const INITIAL_STATE = { isLoggedIn: true }
function systemReducer(state = INITIAL_STATE, action) {
switch(action.type) { ... }
}
// messagesReducer.js
const INITIAL_STATE = { messages: [] }
function messagesReducer(state = INITIAL_STATE, action) {
switch(action.type) { ... }
}
然后说我有messageReducer的动作制定者,如下所示:
// messageActions.js
export const messagesFetchAction = (data) => {
return {
type: MESSAGES_FETCH,
data: data
}
}
现在,如何将systemReducer
的{{1}}的{{1}}修改为isLoggedIn
?因此,例如:
false
答案 0 :(得分:0)
如果您有两个减速器,并不意味着您有多个商店。您仍然只有一个商店,但是由两个减速器合并而成。通常,您的商店可能看起来像:
{
systemReducer: {
isLoggedIn: true
},
messagesReducer: {
messages: []
}
}
您无法从reducer调度动作。这是redux禁止的。但是您可以从动作创建者处分派几个动作。例如:
export const messagesFetchAction = (data) => (dispatch) => {
dispatch({type: LOGGED_IN, isLoggedIn: false});
dispatch({
type: MESSAGES_FETCH,
data: data
});
}
上面的动作创建者用于Redux Thunk。为了能够使用它,请在创建这样的商店时应用中间件
const rootReducer = combineReducers({
systemReducer,
messagesReducer
});
const store = createStore(rootReducer, applyMiddleware(
thunkMiddleware
));