Я пытаюсь объединить действия.В моей текущей проблеме, когда происходит действие SET_CURRENT_USER, я бы хотел, чтобы оно изменило состояние (установило текущего пользователя), а затем запустило кучу других побочных эффектов (извлечение данных, перестройка пользовательского интерфейса и т. Д.).Моей первой мыслью было: «Хорошо, я назначу слушателя в магазине» ... что привело к этому предыдущему вопросу: Как получить доступ к «магазину» в реагирующем редуксе?(или как связывать действия) Там я был в основном так, что установка слушателей является анти-паттерном.
Предложенное решение состояло в том, чтобы «распределить» несколько действий, связанных вместе.Я не следил за тем, как это сделать (мой «mapDispatchToProps» основан на уроках с избыточностью и не похож на предложенный mapDispatchToProps), поэтому я сделал несколько дополнительных поисков по поводу того, как объединить побочные действия вместе, и попал на эту страницу: https://goshakkk.name/redux-side-effect-approaches/
В первом примере я перешел к файлу создателя действий, который выглядит следующим образом:
(actionCreators.js)
export function setCurrentUser(username) {
return { type: SET_CURRENT_USER, payload: username }
}
export function actionTwo(username) {
return { type: ACTION_TWO, payload: username }
}
export function actionThree(username) {
return { type: ACTION_THREE, payload: username }
}
и я попыталсяизмените создатель действия 'setCurrentUser' на что-то похожее на то, что было в демонстрации, но без асинхронных частей для простоты - просто посмотрите, не запускаются ли действия:
export function setCurrentUser(username) {
return dispatch => {
dispatch( { type: SET_CURRENT_USER, payload: username } );
dispatch( { type: ACTION_TWO, payload: username } );
dispatch( { type: ACTION_THREE, payload: username } );
}
}
В моем приложении мой mapDispatchToProps выглядит следующим образом:
const mapDispatchToProps = {
setCurrentUser: setCurrentUser,
}
, и я вызываю это в обработчике switchUser, например: this.props.setCurrentUser(this.state.newUsername);
... и получаю сообщение об ошибке, в котором действия должны быть простыми объектами.
Как я могу связать действия вместе?
Возможно, более глубокая проблема заключается в том, что я не знаю, как получить доступ к хранилищу, чтобы иметь возможность вызывать store.dispatch.(который был моим предыдущим вопросом, отмеченным выше)