Redux 在检测数据变化的时候,是通过 diff 的方式比较差异的,而Vuex其实和Vue的原理一样,是通过 getter/setter来比较的(如果看Vuex源码会知道,其实他内部直接创建一个Vue实例用来跟踪数据变化)
七、diff算法不同
两者流程思维上是类似的,都是基于两个假设(使得算法复杂度降为O(n)):
不同的组件产生不同的 DOM 结构。当type不相同时,对应DOM操作就是直接销毁老的DOM,创建新的DOM。
同一层次的一组子节点,可以通过唯一的 key 区分。
但两者源码实现上有区别:
Vue基于snabbdom库,它有较好的速度以及模块机制。 Vue Diff使用双向链表,边对比,边更新DOM 。
React主要使用 diff队列保存需要更新哪些DOM,得到patch树,再统一操作批量更新DOM。
八、事件机制不同
Vue
Vue原生事件使用 标准Web事件
Vue组件 自定义事件机制,是父子组件通信基础
Vue合理利用了snabbdom库的模块插件
React
React原生事件被包装,所有事件都冒泡到顶层document监听,然后在这里合成事件下发 。基于这套,可以跨端使用事件机制,而不是和Web DOM强绑定。
React组件上无事件,父子组件通信使用props