javascript - 为什么纯 reducer 在 redux 中如此重要?

标签 javascript redux pure-function

纯 reducer 没有副作用,可以实现时间旅行等功能。它们使对应用程序行为的推理变得更加容易。

这对我来说很直观。但我无法阐明为什么纯 reducer 会导致这些积极的非功能性属性。

谁能帮我阐明为什么让 reducer 没有副作用会更容易推理应用程序行为?

是不是因为保证在运行 reducer 后具有完全相同的状态?

如果是这样,那么即使是有副作用的(即非纯的)reducer 肯定也有这个属性吗?

最佳答案

Is it because you are guaranteed to have the exact same state after running the reducers?

是的, reducer 是确定性的,这意味着如果给它们相同的输入,它们将始终产生相同的结果输出。此属性有助于单元测试等情况,因为您知道如果测试通过一次,它将永远通过。

If so, surely even side-effectful (ie. non-pure) reducers could have this property?

不,不纯的 reducer 会同时依赖应用程序的输入状态。在您测试时,它们可能以给定方式运行 1000 次,但当您的应用程序恰好处于您从未想过要测试的特定状态时,它们就会中断。

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

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

关于javascript - 为什么纯 reducer 在 redux 中如此重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767160/

相关文章:

javascript - 如何使用父页面 css 为 iframed 页面内容提供样式?

javascript - .click inside stop : function (event, ui) 运行 X 次(其中 X 是项目数)而不是只运行一次

reactjs - Redux如何处理reducer中的错误

javascript - 这不是纯函数吗?

javascript - React,纯函数警告?

scala - 为什么println被认为是不纯函数?

javascript - 使用 jQuery 循环遍历元素

javascript - 调用 javascript 修改 React 表单上的选择元素

reactjs - 如何在 redux 的 DIspatch 中使用回调?

javascript - 具有相同按钮的 onClick 操作和功能