首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux动作与redux-传奇动作

Redux动作与redux-传奇动作
EN

Stack Overflow用户
提问于 2019-09-04 09:38:59
回答 1查看 513关注 0票数 1

我有点进退两难,什么时候我们需要使用redux动作和redux传奇动作。

我不是想问什么时候使用redux和什么时候使用redux-saga。但是我想知道,当我们使用redux传奇时,我们需要使用redux操作的场景是什么。或者我在使用redux传奇时不需要使用redux动作吗?

当使用redux-saga时,请帮助我理解redux的用例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 15:26:19

不确定这是否是你的意思,但以防万一:行为本身是无法区分的redux和redux-saga。在这两种情况下,动作都是具有类型的对象,可能是有效负载。例如,这是一个动作:

代码语言:javascript
复制
{
  type: 'DO_STUFF',
  value: 3,
}

当你采取行动时,它首先会进入你的中间人。Redux-saga是中间件的一个例子,它可以决定它是否想对该操作做任何事情。如果这个动作通过了“残杀传奇”,它就会转到减速机上。

所以我相信你要问的是:什么时候你应该用传奇来处理一个动作,什么时候你应该用减速机来处理它。答案可以归结为redux-saga和类似中间件最初被创建的原因:

减速器总是同步纯函数。

所以,当你想要做一些异步和/或不纯的事情时,你会使用一个传奇。其中异步部分是最常出现的部分。如果您想要获取数据,它将在一个传奇。如果你想设置一个时间间隔来做某事,它将在一个传奇。

在罕见的情况下,你可能会有一些同步的,但不纯的东西,这也可能是你在一个传奇中放的东西。最近的一个例子是,我想要分派一个操作,而不是更新应用程序状态,我希望它将一些东西保存到本地存储中。这是同步发生的,但由于这是一个副作用,所以我最好把它放在一个传奇。

按照评论中的要求,对同步但不纯的问题进行澄清。如果函数在返回之前完成其所有工作,则该函数是同步的。如果一个函数没有副作用,那么它是纯的;对于给定的输入,它总是返回相同的输出。

一个副作用是当一个函数改变了它自身外部的一些东西,但是它的返回值以外的一种方法。对于纯函数,我应该能够调用它,并假定在该函数之外没有任何变化。例如:

代码语言:javascript
复制
localStorage.setItem('data', 'hello world');
doSomething();
console.log(localStorage.getItem('data'));

如果我对doSomething一无所知,只知道它是纯的,那么我可以肯定localStorage.getItem('data')会返回'hello world‘。但另一方面,如果doSomething是不纯的,那么我就不能做出这样的假设。原则上,可以更改本地存储中的值,从而产生不同的日志语句。

因此,修改本地存储的函数(如以下所示)尽管是同步的,但仍然是不纯的:

代码语言:javascript
复制
const doSomething = (value) => {
  localStorage.setItem('data', value);
}

第二种方法可能是不纯的,如果它不总是对相同的输入返回相同的东西。例如,以下函数是同步的,但不纯的:

代码语言:javascript
复制
const getTime = () => {
  return Date.now();
}

如果我多次打那个电话,我每次都会得到不同的号码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57785621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档