我可以在没有 Redux Thunk 中间件的情况下分派多个操作吗?

Can I dispatch multiple actions without Redux Thunk middleware?

我读到 Redux Thunk 是管理异步的可靠方法 actions/request。通过其他动作调度动作没什么大不了的。

如何调度同步操作? 我不确定 thunk 方法的性能问题,但我可以在其他动作创建者内部调度动作而不在内部定义函数吗?

在我看来,对于这种需要,使用 redux thunk 是不必要的。

将状态更改的操作视为一对一是错误的。它们实际上是多对多的。请记住,所有操作都会在所有减速器上调用。

例如,单个操作可能会触发多个状态更改:

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
    }
}

以相同的方式处理两个动作可能看起来很奇怪,但这只是在单个 reducer 的上下文中。其他减速器可以自由地以不同方式处理它们。

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
    }
}

有了这种多对多关系,根本就没有必要使用操作层次结构。如果您有动作创建者触发多个同步动作,您的代码将变得更加复杂且难以推理。

显示和隐藏通知 似乎是 thunk 的一个很好的用例。

描述了为响应某事而进行多次更新的“默认”方式:从不同的 reducer 处理它。大多数情况下,这就是您想要做的。

有时(如通知)可能会带来不便。我在 .

中描述了如何在调度一个或多个操作之间进行选择

如果您 决定分派多个操作,要么从组件中按顺序执行,要么使用 Redux Thunk。请注意,如果 Redux Thunk 对您来说很神秘,您应该 在使用它之前。它仅在代码组织方面提供好处;实际上,这与您自己连续两次 运行 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

使用 Redux Thunk 不会有任何性能问题。这只是一种很好的调用函数的方式,您可以将您的 dispatch 交给它们,这样他们就可以随心所欲地调用函数。

如果 this 通过,那么是的,使用:

store.dispatch(action1, action2)

也许在 github 时 +1?