Vue于React特性对比(二)

一,关于响应式数据更新方式的实现

1)只有在data里面定义的数据才会有响应式更新

vue依赖的defineProperty的数据劫持加上依赖数据,实现数据的响应式更新。可以称之为依赖式的响应。因为依赖所以注定了只会更新与data相关的数据。

2)react则是更新在state里面定义的数据

this.setState()方法背后除了事件队列的收集之后的统一修改,生成新的react树,通过diff算法计算出哪里需要修改。

为了避免多余的数据更新,可以使用react生命周期函数当中的shouldComponentUpdate这个方法对输入的props和state做对比,终止多余的数据更新操作。

3)关于vuex

vuex只能用在vue上面。

vuex和redux分别是vue和react的状态管理工具。

vuex和redux都是共享状态,前者在状态更新上,利用了vue自身自带的依赖数据更新方式,通过将vuex的store诸如到根实例的方式,注入到各个组件当中。

4)redux

redux实现了redux的完全解耦,可以用在react上面,也可以用在ng上面。

redux同样借助Provider这个根组件,将store注入到上下文context中,但其实现响应式数据更新的方式,是通过发布订阅模式结合共享数据的方式:也就是通过复制路径数据,新路径数据与原有状态作对比的方式,实现变化的数据更新。这样就实现了数据更新的优化。

问题是上面方法只是进行浅层数据的比较,这就导致如果props是一个引用数据,依然会存在浪费,这个时候就需要保证每次传入的是同一个对象。

而其他组件部分,没有通过connect连接的则仍然需要shouldComponentupdate优化。

相比较而言,vuex明显更为直接。

二,vue-router和react-router

vue路由的思维方式更符合中国人的思维,一个占位符router-view,显示不同内容。且也是注入的方式注入到根实例中。且路由组件明显分离。

react路由在写法上面包含根组件(不算redux的Provider),没有vue的占位符概念,而是多个route共同构成的占位符。

vue的嵌套路由比react更为直观,react的嵌套路由只能分散开。

react没有全局路由守卫的概念。

三,其它

react知识v层,vue是vm层。

真正来说redux更加解耦,vue的全家桶反而仅仅只能给vue用。

vue的核心要比react的更加智能,但vue全家桶则不如react全家桶解耦。

但正因为redux相关库的强解耦,导致使用redux需要更多的组件进行性能优化,比如需要react-redux,需要redux-ignore等。这点来说反倒不如vue便于开发和维护。

vue依据的是.vue文件构建的组件化系统,react依据的是React.Component这个类。

二者都在构建一个这样的系统:通过增加代码就能增加系统的功能,而不是通过对现有代码的修改来增加功能。

不断更新……

2018.11.4

react相对vue更灵活这点是从jsx语法本身来说。vue有着更多的api,而react因为本质依然是js,所以api并不多。

react整体上面是模板方法模式。

上一篇:java.lang.IllegalStateException: getOutputStream() has already been called for this response


下一篇:CS小分队第一阶段冲刺站立会议(5月6日)