是否可以从其他商店修改商店?

时间:2019-06-24 12:04:41

标签: reactjs redux

我正在使用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

1 个答案:

答案 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
));