Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以在没有Redux Thunk中间件的情况下调度多个操作吗?_Javascript_Redux_Redux Thunk - Fatal编程技术网

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

Javascript 我可以在没有Redux Thunk中间件的情况下调度多个操作吗?,javascript,redux,redux-thunk,Javascript,Redux,Redux Thunk,我了解到Redux Thunk是管理异步操作/请求的可靠方法。通过其他操作来调度操作没有什么意义 调度同步操作怎么样? 我不确定thunk方法的性能问题,但我可以在其他action creator中调度action而不在其中定义函数吗 在我看来,使用redux thunk是不必要的。将状态更改的操作视为一对一是错误的。事实上,它们是多对多的。请记住,所有操作都在所有减速器上调用 例如,单个操作可能会触发多个状态更改: function firstReducer(state, action) {

我了解到Redux Thunk是管理异步操作/请求的可靠方法。通过其他操作来调度操作没有什么意义

调度同步操作怎么样? 我不确定thunk方法的性能问题,但我可以在其他action creator中调度action而不在其中定义函数吗


在我看来,使用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
    }
}

在这种多对多关系中,根本不需要动作层次结构。如果动作创建者触发多个同步动作,那么代码会变得更复杂,更难推理。

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

描述了为响应某些内容而执行多个更新的“默认”方式:从不同的还原程序处理它。通常这就是你想要做的

有时(如通知)可能会很不方便。我描述了如何在中调度一个或多个操作之间进行选择

如果您决定分派多个操作,可以从组件开始按顺序执行,也可以使用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不会有任何性能问题。这只是调用函数的一种很好的方法,您可以将
分派交给它,这样它们就可以执行任意次数的操作。

如果成功,则可以使用:

store.dispatch(action1, action2)

在github可能+1?

为什么您希望动作创建者分派多个同步动作?这似乎是不必要的间接和复杂。可能还有一种更好的方法。这里已经描述了这种用法:我不想让多个简化程序使用相同的操作,而是想用其他操作触发特定的操作(例如,通知{type:'DISPLAY_NOTIFICATION',text:''}在actionCreators.js中,使用中间件的单个action Creator可以调度多个action。如果我们可以调度其他action,这将避免用新的action类型重新定义特定的Reducer。我可以想象Notificationreducer应该用新的action类型进行更改,因为我想我会用任何其他动作填充它的状态。据我所知,该页面上的示例都不会触发多个同步动作。有一个同步的LOAD\u POSTS\u REQUEST动作被调度,然后是异步LOAD\u POSTS\u REQUEST/LOAD\u POSTS\u失败。我应该如何实现只有在第一次调度失败时才开始第二次调度的要求完成了国家的转型?@SutikshanDubey你找到你问题的答案了吗?我还需要你问的东西-做几份报告()但是snyc.dispatches包含同步方法调用,当从基于thunk的中间件运行时会同步运行。正如Dan所建议的,我将我的dispatches放在基于thunk的中间件中。当放在组件中时,是的,您可能不确定React通过批处理来优化状态更新。很遗憾,但它似乎没有*(