这是Redux官方文档的一部分:
它被称为reducer,因为它是你传递给它的函数类型
Array.prototype.reduce(reducer, ?initialValue)
这对我来说没什么意义.有人可以向我解释为什么他们实际上被称为减速器?它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.
它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.
Reducers不只是返回默认值.它们总是返回状态的积累(基于所有先前和当前的动作).
因此,它们充当了国家的减速者.每次调用redux reducer时,都会通过action传入状态(state, action)
.然后基于该动作减少(或累积)该状态,然后返回下一状态.这是经典fold
或reduce
功能的一个循环.
正如@azium总结的那样state -> action -> state
.
如果您认为应用中的一系列操作类似于列表,或者更像是流,则可能更有意义.
拿这个人为的例子:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
第一个参数是表单的函数(Int, String) => Int
.除了初始值,您还可以传递reduce
可能被称为"reducer函数"的内容,并获得处理该系列项的结果.您可能会说,reducer函数描述了每个连续的单个项目所做的更改结果.换句话说,reducer函数获取先前的输出和下一个值,并计算下一个输出.
这类似于Redux reducer的作用:它采用先前的状态和当前动作,并计算下一个状态.
在真正的函数式编程风格中,您可以在概念上擦除应用于参数和结果的含义,并只关注输入和输出的"形状".
在实践中,Redux Reducer通常是正交的,在某种意义上,对于给定的操作,它们并不都对相同的属性进行更改,这使得分割它们的职责和聚合输出变得容易combineReducers
.
如前所述,该名称与函数式编程中的reducer概念有关.您可能还会发现Reducer的Merriam-Webster字典定义很有用:
1A.汇集或导致汇合:巩固(将所有问题减少到一个)
reducer将操作合并到表示应用程序状态的单个对象中.
之所以将redux reducer称为a
reducer
是因为您可以“减少” (商店中的)acollection of actions
和aninitial state
,以便在其上执行这些操作以获得结果final state
。
怎么样?为了回答这个问题,让我再次定义一个reducer:
的减少()方法施加
function (reducer)
针对accumulator
与阵列的每个值(从左到右),以将其降低到一个值。
Redux减速器有什么作用?
减速器是
function
采用当前状态和操作并返回下一个状态的纯函数。请注意,状态是accumulated
应用集合上的每个操作来更改此状态的状态。
因此,给定a collection of actions
,则将缩减器应用于集合的每个值(从左到右)。第一次返回initial value
。现在,将reducer再次应用于此初始状态和第一个操作以返回下一个状态。每次都会在上应用下一个收集项(操作)current state
以获取next state
直到到达数组末尾。然后,您得到the final state
。多么酷啊!
我们知道减速器来自何处(函数式编程),以及为什么可以认为它们正在做减少工作(将n个输入项减少为单个返回值-这就是正常功能所支持的)。但是:名称只是名称,就像rose是玫瑰的名称一样。不要想太多。Redux程序员是IT人员,他们被锁定在上下文中,这很有意义。我们其余的人必须接受发明人的权利,将蓝狗称为黄猫;-)