【问题标题】:Why doesn't setTimeout work for async action creators in React Redux?为什么 setTimeout 不适用于 React Redux 中的异步操作创建者?
【发布时间】:2016-08-15 22:00:21
【问题描述】:

我正在从 here 学习 react redux 但不了解这部分:

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

但是我们的动作创建者不会返回一个动作,它会 返回“未定义”。所以这不是我们正在寻找的解决方案 为。

为什么这不起作用?我认为 setTimeout 返回超时的 ID,而不是未定义的。

【问题讨论】:

  • 如果你这样做了return setTimeout(...。如果没有命中return 语句,则函数返回undefined
  • 所以如果我使用return,整个事情都会起作用?
  • 不,不会。它会返回一个 ID,但你永远不会得到 setTimeout 回调的返回值。这意味着,您永远无法访问 { type: 'SAY', message } 对象。
  • 深渊。没有什么可以引用它。
  • 您可以使用Redux Thunk middleware 进行异步操作。

标签: javascript reactjs settimeout redux react-redux


【解决方案1】:

代码不起作用的原因有两个:

  1. 因为该函数没有返回函数(看起来像是错字)。

  2. 1234563在本教程的后面,他们展示了它是如何被调用的:https://github.com/happypoulp/redux-tutorial/blob/master/09_middleware.js#L61(redux 期望 action 始终是一个对象,如果它是一个函数,redux-thunk 会执行这个 action)。

通过使用 thunk 中间件,您可以生成所谓的“效果”。这种影响是应用程序状态之外的。在函数式编程中,这被称为“不纯”函数。

附带说明一下,该教程看起来不太好。我会推荐一些更像本教程的东西:https://egghead.io/courses/getting-started-with-redux

【讨论】:

  • 这不是错字,他正在阅读的链接明确说明了为什么这不起作用。
  • 是的,但看起来不是一个非常有教养或很好的解释为什么它不起作用(见我的第 2 点)。
  • “但是我们的动作创建者不会返回一个动作,它会返回“未定义””这是完全正确的......它解释得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2016-09-22
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
相关资源
最近更新 更多