一,关于响应式数据更新方式的实现
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整体上面是模板方法模式。