当前位置: 首页 > 面试题库 >

与将常规函数用作异步操作创建者相比,在redux中使用thunk中间件有什么好处?[关闭]

乐正镜
2023-03-14
问题内容

我已经使用redux大约两个月了,最近才开始探索探索处理异步行为(例如获取数据)的不同方法。从文档和GitHub上的讨论中可以看出,使用thunk中间件来完成此操作的标准方式是一个非常简单的概念,但是我不确定我是否了解将异步状态机执行的责任交给redux的好处可以使用简单的独立功能的中间件。

异步动作创建者 fetchPosts

function fetchPosts(reddit) {
  return dispatch => {
    dispatch(requestPosts(reddit))
    return fetch(`http://www.reddit.com/r/${reddit}.json`)
      .then(response => response.json())
      .then(json => dispatch(receivePosts(reddit, json)))
  }
}

然后,也许在ReactJS组件中可能有一个按钮,例如下面的按钮。

派发fetchPost

<button onClick={() => this.props.dispatch(fetchPosts(this.props.reddit))} />

单击此按钮时,将调用异步操作创建者 requestPosts ,该操作返回一个接受 分派
的函数,该函数负责执行可能有副作用的任何异步代码,并分派可能导致的实际操作。

没有简单的中间件的简单示例

尽管上面的内容是完全可以理解的,但尚不清楚为什么人们不愿意只做一些更简单的事情,例如下面的示例。

没有动作创建者的委托异步调度

function fetchPosts(dispatch, reddit) {
  dispatch(requestPosts(reddit))
  return fetch(`http://www.reddit.com/r/${reddit}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(reddit, json)))
}

调用fetchPosts函数并将分派作为参数传递。

<button onClick={() => fetchPosts(this.props.dispatch, this.props.reddit)} />

结论

基于两个并排的示例,我看不到使用thunk中间件的异步动作创建者如何为我买东西,并且在设置中间件时需要增加复杂性,并引入了两种动作创建者(1)纯函数,它们返回单个要分派的动作(2)不纯的功能,这些功能会将动作和其他杂项反馈到分派器中。我觉得我在这里缺少一些可以解释在redux中分发不可变动作以外的内容的好处。


问题答案:

这是很好的发展领域。我想说,异步动作创建者并不特别满意,这是一个普遍的看法,但是有充分的理由倾向于ReduxThunk而不是完全手动的方法。但这只是许多可能的方法之一。

我认为,从长远来看,社区可能会选择Redux Thunk以外的其他东西,但是它的简单性使其成为一个很好的起点。



 类似资料:
  • 本文向大家介绍redux的thunk作用是什么?相关面试题,主要包含被问及redux的thunk作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 redux-thunk的作用:不使用中间件的情况,action只能是个对象,thunk帮助我们异步请求数据给store

  • 我正在尝试将async await与redux thunk中间件一起使用,但我得到了红屏,错误操作必须是普通对象。使用自定义中间件进行异步操作。我想我没有返回正确类型的值。我按下按钮将twitter用户链接到现有的firebase帐户。该按钮到达一个名为toggleTwitterAuthState的函数: 它调用函数link Twitter帐户,我使用的反应本地调试器把一个断点返回异步(调度)和它

  • 问题内容: 每个案例都有不同的用例吗?什么时候应在makeStyles上使用withStyles? 问题答案: 所述钩API()只能与功能的部件使用。 的高次成分API()可与类组件或功能的部件使用。 它们都提供相同的功能,并没有在无差异的参数和。 如果您将其与功能组件一起使用,则建议您使用Hook API()。与(并在内部委托)相比,有一点额外的开销。 如果您要自定义Material- UI组件

  • 问题内容: 当在使用Doctrine类时需要自定义查询时,有人可以为我提供一些明确的理由(支持事实)来使用/学习DQL与SQL吗? 我发现,如果无法使用ORM的内置关系功能来实现某些目标,通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法。在这种方法中,用直接的SQL编写所需的代码(使用带有适当准备好的语句/注入保护等的PDO)。DQL似乎是学习/调试/维护的另一种语言,

  • 所以我在选择任何一个时都感到困惑。一定很容易理解。

  • 问题内容: 我在创建的Web API中执行以下操作: 通过以下方式通过Jquery Ajax调用完成对此Web服务的调用: 我已经看到一些开发人员以这种方式实现了先前的操作: 不过,得说GetProductsWithHistory()是一个相当长的操作。考虑到我的问题和上下文,使webAPI操作异步将给我带来什么好处? 问题答案: 在您的特定示例中,该操作根本不是异步的,因此您正在执行的操作是异步