Reactjs 如何一个接一个地分派多个操作

Reactjs 如何一个接一个地分派多个操作,reactjs,redux,Reactjs,Redux,在我的react/redux应用程序中,我经常希望一个接一个地分派多个操作 给出以下示例:成功登录后,我希望存储用户数据,然后启动另一个异步操作,从服务器加载应用程序配置 我知道我可以使用redux thunk来构建这样的动作创建者 function loginRequestSuccess(data) { return function(dispatch) { dispatch(saveUserData(data.user)) dispatch(loadConfig())

在我的react/redux应用程序中,我经常希望一个接一个地分派多个操作

给出以下示例:成功登录后,我希望存储用户数据,然后启动另一个异步操作,从服务器加载应用程序配置

我知道我可以使用
redux thunk
来构建这样的动作创建者

function loginRequestSuccess(data) {
  return function(dispatch) {
    dispatch(saveUserData(data.user))
    dispatch(loadConfig())
  }
}
因此,我的问题是:

  • 当第一次
    调度返回时,是否所有侦听该操作的减速器都已更改状态?我想知道这两个调度电话是否严格按顺序进行
  • 这种方法被认为是分派多个操作的最佳实践吗?如果没有,你有什么建议

  • 谢谢你的帮助

    redux thunk
    正是您想要的。我认为这是一个很好的练习。
    为了回答您的问题,事实上,当第一次调度返回时,状态已经被调用的还原器更改了。

    是的,redux thunk允许您按照您所说的做,是的,它是调度多个操作的最佳实践(因为它的简单性,我更喜欢它)。状态确实会在您分派时(在它返回时)立即更新,这就是为什么会给您一个函数来检索thunk中的状态,而不仅仅是对状态的引用。通过这种方式,您可以通过一次分派来更改状态,然后调用getState()获取对新状态的引用,以便在需要时从中读取。

    我知道这是一个延迟响应:-p您可以使用Redux Thunk并签出Redux Saga来完成此操作。Redux传奇提供了一种同时处理大量动作的惊人方式。下面是使用Redux Thunk分派多个操作的示例

    function getAndLoadSider(moduleName){
        return function(dispatch){
            return doSomeApiCall(someData).then(function(item){
                let _item = someOtherFunction(item.collections);
                    let _menuData = {
                        name: item.name,
                        key: item.key
                    };
                return new Promise(function(res, rej){
                    dispatch(actionOne(_menuData));
                    res(_item);
                }).then((_item) =>  dispatch(actionTwo(_item)))
        }
    }
    
    当一个动作依赖于第一个动作时,上述方法适用于您的情况。这是一种基于承诺的方法。如果你不喜欢做大量的承诺编码,我建议你选择传奇。查看此链接,您将学习如何撰写传奇。学习曲线陡峭;但一旦你完成,传奇将使你成为一个忍者redux开发人员


    希望这能有所帮助:-)

    我已经看过了redux传奇,它基于可能符合您需要的生成器/产量。乍一看可能很困难,但如果您想控制顺序或并行的内容,请在调度是顺序和同步的情况下尝试此操作,ReactJS将批处理更新并异步运行其更新(渲染等),因此您可能只获得一个渲染。看,是的,redux thunk很适合调度多个操作,但它不能保证所有操作都是顺序的,不是吗?在同一个调度程序中,所有操作都是顺序的。在上面描述的情况下,
    saveUserData
    总是在
    loadConfig
    之前,您可以分享实现或链接到任何相关的文章吗。这里似乎有一些例子:否则,对于一篇文章,它看起来像是有人在这里写了一些关于它的东西:为什么不用saga举例说明呢?你提到了,可能会给出全面的答案。我们赞赏各方面的意见