为什么纯还原剂在redux中如此重要?

Ben*_*Ben 6 javascript pure-function redux

纯还原剂没有副作用,并且可以进行时间旅行。它们使对应用程序行为的推理更加容易。

这对我来说很直观。但是我不能说出为什么纯净的还原剂会导致这些积极的非功能性属性。

有人可以帮我阐明为什么减少减速器的副作用使应用程序行为的推理更容易吗?

是因为可以保证运行减速器后状态完全相同吗?

如果是这样,那么即使是副作用(即非纯的)还原剂也肯定可以具有此特性?

Str*_*ior 6

是因为可以保证运行减速器后状态完全相同吗?

是的, reducer是确定性的,这意味着如果给它们相同的输入,则它们将始终产生相同的结果输出。此属性在单元测试之类的情况下会有所帮助,因为您知道测试一次通过就将始终通过。

如果是这样,那么即使是副作用(即非纯的)还原剂也肯定可以具有此特性?

不,不纯净的减速器将同时依赖于输入和应用程序的状态。在您进行测试时,它们可能会以给定的方式运行1000次,但是在您的应用程序处于您从未想到要测试的特定状态时,它们就会崩溃。

当然,在单元测试中完全有可能遗漏一些极端情况。但是,如果测试结果是基于输入的 100%,那么仅通过查看减速器预期的输入,您就更有可能注意到那些极端情况。

如果某个功能更改了应用程序的状态,则两次运行相同的功能,或者以不同的顺序运行相同的几个功能,可能会导致完全不同的行为。这使得很难对应用程序的正确性进行推理,因为为了知道给定的代码行是否正确,您必须知道在调用它之前发生了什么,可能是在应用程序的完全不同的部分中发生了什么。