与像 React 这样的不可变方法相比,Vue 的反应性的优缺点是什么?

洪梓凱*_*洪梓凱 6 immutability reactjs vue.js vue-reactivity

Vue 通过它的反应机制触发组件重新渲染,因此开发人员可以直接改变状态。Vue 会检测状态变化并触发组件重新渲染。

React 手动触发组件重新渲染setState,React 将区分 VDOM 以检查它是否应该重新渲染。建议开发人员不要直接改变状态,而是创建新的状态来替换原始状态,这样可以shallowEqual有效地处理原始状态和新状态。(不可变方法)。

例如,有一个状态如下:

state = { a: 1, b: 2 }

// mutate state in Vue
state.a = 3

// mutate state in React
this.setState({...state, a: 3 })
Run Code Online (Sandbox Code Playgroud)

似乎反应机制更直观,可以编写更少的代码。我想知道这两种方法之间的优缺点是什么?我应该选择哪种场景?

Ale*_*xey 1

我将回答最后一个问题,因此第一个问题不再相关:基本上,React 相对于其他框架没有任何优势,除了流行度。

  1. 对于用户和程序员来说,它并没有更快。
  2. 功能组件只是一批打破了许多编程原则的东西(例如 SOLID,因为组件负责 UI、逻辑、状态和反应性,因为反应性不可能在组件外部实现。)
  3. 使用 React,你总是以递归方式工作(渲染组件 -> setState -> 渲染组件)。这是一种非直观的方法。
  4. 此外,React 让你编写大量样板代码(useCallback、useMemo、类名、导入样式)。
  5. 它有一些糟糕但流行的库,例如 React Router 或 Redux。他们继承了 React 的相同问题,并且有一些新的问题。
  6. 由于无休止的重新渲染,尤其是在严格模式下,调试非常困难。

... 等等

将来,当项目变大时,这些问题将花费大量资金。

因此,如果你在雇用其他程序员方面没有问题,请选择 Vue 3。当然它也有一些问题,但它们不像 React 那样具有全局性。