如果您决定分派多个操作,只需从组件中按顺序执行,或使用Redux Thunk . 请注意,如果Redux Thunk看起来很神秘,那么在使用之前你应该understand what it really is . 它只提供代码组织方面的好处;实际上,与自己连续两次运行 dispatch() 并没有什么不同 .
也就是说,Redux Thunk调度多个动作如下所示:
function increment() {
return { type: 'INCREMENT' }
}
function incrementTwice() {
return dispatch => {
dispatch(increment())
dispatch(increment())
}
}
store.dispatch(increment())
incrementTwice()(store.dispatch) // doesn’t require redux-thunk but looks ugly
store.dispatch(incrementTwice()) // requires redux-thunk but looks nice
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
相反,两种不同的行为可能会导致相同的状态变化 .
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
case ACTION_Y:
// handle action x and y in the same manner
}
}
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
case ACTION_Y:
// handle action y
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
default:
// ignore action y
}
}
3 回答
显示和隐藏通知indeed似乎是一个很好的用例 .
David’s answer描述了为响应某些事情而进行多次更新的“默认”方式:从不同的reducer处理它 . 这通常是你想要做的 .
有时(与通知一样)它可能不方便 . 我将描述如何在my answer to this question中调度一个或多个动作之间进行选择 .
如果您决定分派多个操作,只需从组件中按顺序执行,或使用Redux Thunk . 请注意,如果Redux Thunk看起来很神秘,那么在使用之前你应该understand what it really is . 它只提供代码组织方面的好处;实际上,与自己连续两次运行
dispatch()
并没有什么不同 .也就是说,Redux Thunk调度多个动作如下所示:
使用Redux Thunk不会有任何性能问题 . 这只是一种很好的调用函数的方法,你可以将它们交给你
dispatch
,这样他们就可以按照自己的意愿多次执行 .将行动变更为一对一的行为是错误的 . 它们实际上是多对多的 . 请记住,所有减少器都会调用所有操作 .
例如,单个操作可能会触发多个状态更改:
相反,两种不同的行为可能会导致相同的状态变化 .
以相同的方式处理两个动作可能看起来很奇怪,但这只是在单个reducer的上下文中 . 其他减速器可以自由地处理它们 .
有了这种多对多关系,就没有必要拥有一个动作层次结构 . 如果您有动作创建者触发多个同步操作,则您的代码会变得更复杂,更难以推理 .
如果this完成,那么是,使用:
也许在github 1?