Vuex 和 Redux 不变性方法的差异

tnk*_*nkh 13 reactjs vue.js redux vuex

使用过 Vuex 并意识到通过简单赋值的变异处理程序来改变状态是多么容易,我现在正在使用 redux 并了解到 redux 强调不变性,但它使编码变得更加冗长。现在问题来了,

  1. 为什么 redux 强调不变性而 vuex 不强调?
  2. 为什么即使你可以用 vuex 用更简单的编码做同样的事情,redux 似乎更受欢迎?
  3. 这两种不同方法的优缺点是什么?

令人惊讶的是,我在互联网上找不到关于此的任何信息。

HMR*_*HMR 13

要回答这些问题,您需要了解它们的工作原理。Veux 有一个可观察/反应的状态,因此设置 state.something 将触发任何监视 state.something 的东西。

Redux 状态是一个“正常”的 javascript 数据对象(对象上没有任何方法,也不应该使用原型)。当一个动作被分派时,redux 会创建一个新的状态,react-redux 将运行所有的mapStateToPropsoruseSelector函数并将当前结果与最后一个进行比较(使用引用比较 so {} !== {}。如果有变化,那么 react-redux 将重新渲染那个组件。

现在回答您的问题:

  1. Veux 状态不仅仅是一个对象,而且许多侦听器都被添加到状态中,所以当你这样做时,state.newValue='new value'它会触发所有这些侦听器。Redux 需要将以前的值与当前值进行比较,而最高效的方法是引用比较。因此,您必须生成一个新状态,其中所有未更改的 props 仍指向与以前相同的引用,但更改的 props 指向另一个引用。

  2. React/Redux 使用函数式方法,而 vue/veux 使用 OO 方法。它之所以受欢迎可能是因为 React Redux 存在的时间更长,并且拥有更好的支持生态系统。函数式编程最近变得越来越流行,因为即使经过几十年的尝试,仍然很难在 OO(并发)中编写好的代码。鲍勃叔叔能想到的最好的办法是“一个班级应该只有一个改变的理由。” 并根据该规则编写,您最终将得到一个只有方法可以用函数完成的类。在类中组合相关数据和行为的一个问题是,稍后这种关系可能会改变,或者您发现关联它们的方式并不能反映现实世界中需要实现的内容。

  3. 它们都很难学习并且做得很好,我发现 redux 方式更容易遵循和预测复杂代码库中会发生什么(复杂的需求,而不是不必要的复杂性)并且更容易测试,但最终这只是个人偏好。