当前位置:  开发笔记 > 编程语言 > 正文

为什么Redux的状态函数称为reducers?

如何解决《为什么Redux的状态函数称为reducers?》经验,为你挑选了5个好方法。

这是Redux官方文档的一部分:

它被称为reducer,因为它是你传递给它的函数类型 Array.prototype.reduce(reducer, ?initialValue)

这对我来说没什么意义.有人可以向我解释为什么他们实际上被称为减速器?它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.



1> Davin Tryon..:

它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.

Reducers不只是返回默认值.它们总是返回状态的积累(基于所有先前和当前的动作).

因此,它们充当了国家的减速者.每次调用redux reducer时,都会通过action传入状态(state, action).然后基于该动作减少(或累积)该状态,然后返回下一状态.这是经典foldreduce功能的一个循环.

正如@azium总结的那样state -> action -> state.


谢天谢地,在我写这篇文章的时候,我并不是唯一一个认为名称缩减器在这篇文章中至少有2,000次观看的人.事实上,有人甚至愿意努力挖掘为什么它被称为减速器,这并不意味着它确实有点偏离?如果它被称为reducer,因为它是你传递给Array.prototype.reduce的函数类型,就像让我们将橙色称为橙色榨汁机,因为我们将橙色传递给object.prototype.juicer,或者我们不应该将它称为水果?
@JamieHutber我想你在这种情况下略微忽略了reducer的含义.reducer正在获取项目的流(或集合)并将它们组合成单个项目.在这种情况下,所有操作(通过时间)是项目的集合,并且状态是单个项目.合理?
大声笑我现在看到了.所以它基本上只是简化它们.为什么不称之为合并呢:P谢谢让我明白:)
这个逻辑的哼声不应该被称为增量而不是减速器吗?没有数据被减少它被添加:/ lol
我同意,这根本不是一个直观的名称。从逻辑上讲,被称为reducer的它应该减少一些东西。如果将状态更改与状态一起放在整个阵列中,然后将它们一次全部组合成一个状态,那么这将是一个直观的名称。

2> acjay..:

如果您认为应用中的一系列操作类似于列表,或者更像是流,则可能更有意义.

拿这个人为的例子:

['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)

第一个参数是表单的函数(Int, String) => Int.除了初始值,您还可以传递reduce可能被称为"reducer函数"的内容,并获得处理该系列项的结果.您可能会说,reducer函数描述了每个连续的单个项目所做的更改结果.换句话说,reducer函数获取先前的输出和下一个值,并计算下一个输出.

这类似于Redux reducer的作用:它采用先前的状态和当前动作,并计算下一个状态.

在真正的函数式编程风格中,您可以在概念上擦除应用于参数和结果的含义,并只关注输入和输出的"形状".

在实践中,Redux Reducer通常是正交的,在某种意义上,对于给定的操作,它们并不都对相同的属性进行更改,这使得分割它们的职责和聚合输出变得容易combineReducers.



3> Drew Goodwin..:

如前所述,该名称与函数式编程中的reducer概念有关.您可能还会发现Reducer的Merriam-Webster字典定义很有用:

1A.汇集或导致汇合:巩固(将所有问题减少到一个)

reducer将操作合并到表示应用程序状态的单个对象中.



4> code4kix..:

之所以将redux reducer称为a reducer是因为您可以“减少” (商店中的)a collection of actions和an initial state,以便在其上执行这些操作以获得结果final state

怎么样?为了回答这个问题,让我再次定义一个reducer:

的减少()方法施加function (reducer)针对accumulator与阵列的每个值(从左到右),以将其降低到一个值。

Redux减速器有什么作用?

减速器是function采用当前状态和操作并返回下一个状态的纯函数。请注意,状态是accumulated应用集合上的每个操作来更改此状态的状态。

因此,给定a collection of actions,则将缩减器应用于集合的每个值(从左到右)。第一次返回initial value。现在,将reducer再次应用于此初始状态和第一个操作以返回下一个状态。每次都会在上应用下一个收集项(操作)current state以获取next state直到到达数组末尾。然后,您得到the final state。多么酷啊!



5> 小智..:

我们知道减速器来自何处(函数式编程),以及为什么可以认为它们正在做减少工作(将n个输入项减少为单个返回值-这就是正常功能所支持的)。但是:名称只是名称,就像rose是玫瑰的名称一样。不要想太多。Redux程序员是IT人员,他们被锁定在上下文中,这很有意义。我们其余的人必须接受发明人的权利,将蓝狗称为黄猫;-)

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有