为什么在React Redux中,setTimeout对异步动作创建者不起作用?

Why doesn't setTimeout work for async action creators in React Redux?

本文关键字:异步 创建者 不起作用 setTimeout React Redux 为什么      更新时间:2023-09-26

我从这里学习react redux,但不理解这部分:

var asyncSayActionCreator_0 = function (message) {
    setTimeout(function () {
        return {
            type: 'SAY',
            message
        }
    }, 2000)
}

但是我们的动作创建器不会返回一个动作,它会返回"定义"。所以这不是我们要找的解。

为什么这个不行?我认为setTimeout返回超时的ID,而不是未定义的

代码不能工作的原因有两个:

  1. 因为这个函数没有返回函数(看起来像一个错字)

  2. 即使它返回一个number,它也不是一个动作(一个对象),你还需要一个对"dispatch"函数的引用来将动作发送到store。在后面的教程中,他们展示了如何调用:https://github.com/happypoulp/redux-tutorial/blob/master/09_middleware.js#L61 (redux期望动作始终是一个对象,如果它是一个函数,redux-thunk执行动作)。

通过使用中间件,你可以生成所谓的"效果"。这种影响是应用程序状态的外部影响。在函数式编程中,这被称为"非纯"函数。

作为旁注,这个教程看起来不是很好。我推荐一些类似本教程的内容:https://egghead.io/courses/getting-started-with-redux