学习了 React 之后,我不自觉地会将 vue 和 react 相对比,而且也在思考使用框架的同时我学习的开发思想。

# 数据绑定

他们都是响应式的框架,但他们 “实现响应式 “的方法有所不同。

# Vue

vue 在数据绑定上采用了双向绑定的策略。在 vue2 之中,采用了 Object.defineProperty(Vue3 使用了 Proxy 进行重写)来递归的将每个实例的数据转化成 getter/setter,从而达到一个数据拦截的目的,加上发布订阅模式,视图感知到依赖的变化就会自动刷新,从而达到监听数据。

再对事件的监听,来修改数据,达到两方一致的效果。

# React

React 之中并没有数据和视图的双向绑定,而是采用的 ** 局部刷新 **。当数据发生变化,直接重新渲染组件,就可以得到最新的视图。

# 表单输入绑定

在 React 中有个概念为受控组件,Vue 中有个 v-model。学习到后来的时候就发现,其实这两个的思想有点相似。

受控组件的意思是将表单输入控件的数据源绑定为组件的 state,然后监听更改事件,触发事件时修改数据源,达到一个受控的样子。

如:

function Component(){
  const [name,setName]  = useState('');
  return (
  	<input type="text" value={name} onChange={(e) => setName(e.target.value)}></input>
  )
}

而 vue 中的 v-model 其实是个语法糖,其实就是相当于实现了像上面代码一样的效果。

# 组件化、单向数据流

每个 vue 组件本质上就是一个 vue 实例,react 组件可以是函数、也可以是类。他们都有生命周期方法。

组件间通信他们也有点类似,都是提倡的单向数据流。

  • 父 -> 子,都是通过 props 向下传递数据。
  • 子 -> 父,vue 中利用子组件触发 events、父组件监听 events 来达到向上发送信息(携带数据)给父组件。React 中是利用父组件通过 props 传给子组件的回调来进行传递数据。

# 状态管理

React 中比较经典的比如 redux,Vue 中就是 vuex,思想上也有一些类似的地方。比如 vuex 不允许组件直接修改 state,而是需要通过触发 Action 来提交一个 mutation 从而更改数据。

在 vuex 中数据是可变的,但 redux 中提倡数据不可变性,Redux 每次 reducer 计算出新的值后都会生成新的 state 代替旧的 state

# 渲染、更新

在 vue 中,组件的依赖在渲染过程中自动追踪,系统能够精确知道那些组件需要被重渲染。

但 React 中某个组件状态发生变化后,react 会以该组件为根,重新渲染整个组件子树,虽然过程中可以利用 pure Component 或 should ComponentUpdate 来避免不必要的渲染,但仍然没有 Vue 精确。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

orange 微信支付

微信支付

orange 支付宝

支付宝

orange 贝宝

贝宝