Можно ли изменить магазин из другого магазина? - PullRequest
0 голосов
/ 24 июня 2019

Я использую Redux с несколькими редукторами, объединенными в 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) { ... }
}

А затем скажите, что у меня есть создатели действий для сообщений Reducer, как указано ниже:

// messageActions.js
export const messagesFetchAction = (data) => {
    return {
        type: MESSAGES_FETCH,
        data: data
    }
}

Теперь, как я могу изменить systemReducer isLoggedIn на false с messagesFetchAction()? Так выглядит, например, под:

// messageActions.js
export const messagesFetchAction = (data) => {
    systemState.setState({isLoggedIn: false});     // <=====
    return {
        type: MESSAGES_FETCH,
        data: data
    }
}

1 Ответ

0 голосов
/ 24 июня 2019

Если у вас есть два редуктора, это не значит, что у вас есть несколько магазинов.У вас все еще есть один магазин, но в сочетании из двух редукторовВ целом ваш магазин может выглядеть следующим образом:

{ 
    systemReducer: {
        isLoggedIn: true
    },
    messagesReducer: {
        messages: []
    }
}

Невозможно отправить действие из редуктора.Это запрещено редуксом.Но вы можете отправить несколько действий от создателя действия.Например:

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
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...