它被称为reducer,因为它是你传递给它的函数类型
Array.prototype.reduce(reducer, ?initialValue)
这对我来说没什么意义.有人可以向我解释为什么他们实际上被称为减速器?它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.
Dav*_*yon 67
它们返回默认值(或者它们具有默认参数值)的事实并不会使它们成为减速器恕我直言.
Reducers不只是返回默认值.它们总是返回状态的积累(基于所有先前和当前的动作).
因此,它们充当了国家的减速者.每次调用redux reducer时,都会通过action传入状态(state, action).然后基于该动作减少(或累积)该状态,然后返回下一状态.这是经典fold或reduce功能的一个循环.
正如@azium总结的那样state -> action -> state.
acj*_*jay 20
如果您认为应用中的一系列操作类似于列表,或者更像是流,则可能更有意义.
拿这个人为的例子:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
Run Code Online (Sandbox Code Playgroud)
第一个参数是表单的函数(Int, String) => Int.除了初始值,您还可以传递reduce可能被称为"reducer函数"的内容,并获得处理该系列项的结果.您可能会说,reducer函数描述了每个连续的单个项目所做的更改结果.换句话说,reducer函数获取先前的输出和下一个值,并计算下一个输出.
这类似于Redux reducer的作用:它采用先前的状态和当前动作,并计算下一个状态.
在真正的函数式编程风格中,您可以在概念上擦除应用于参数和结果的含义,并只关注输入和输出的"形状".
在实践中,Redux Reducer通常是正交的,在某种意义上,对于给定的操作,它们并不都对相同的属性进行更改,这使得分割它们的职责和聚合输出变得容易combineReducers.
Dre*_*win 14
如前所述,该名称与函数式编程中的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。多么酷啊!
作者认为 state 是 reduce 函数的累加器。前任:
Final State = [Action1, Action2, ..., ActionN].reduce(reducer, Initial State);
Run Code Online (Sandbox Code Playgroud)
reduce 函数来自 Functional Programming,名称“reducer”也来自 FP。
我不喜欢在这里使用这个名字。因为我不认为世界是行动后的单一价值结果。这里的状态是一个对象。例如:
['eat', 'sleep'] === [addTodo('eat'), addTodo('sleep')].reduce(reducer, []);
Run Code Online (Sandbox Code Playgroud)
这个Reducer根本没有减少任何东西。我不在乎它是否减少任何东西。将其命名为Transducer会更有意义。
小智 5
我们知道减速器来自何处(函数式编程),以及为什么可以认为它们正在做减少工作(将n个输入项减少为单个返回值-这就是正常功能所支持的)。但是:名称只是名称,就像rose是玫瑰的名称一样。不要想太多。Redux程序员是IT人员,他们被锁定在上下文中,这很有意义。我们其余的人必须接受发明人的权利,将蓝狗称为黄猫;-)