vue虚拟dom和react虚拟dom有什么不同?

小编在网上查了大量文章,得出一个结论,react中数据发生变化(调用setstate时),render函数就会执行,重新生成一个新的虚拟dom,这个虚拟dom和旧的虚拟dom做比较,得出差异然后渲染。

而vue组件中数据发生变化,由于数据变化会触发setter,由于vue组件中数据的getter的作用,收集了依赖,setter触发会根据这些依赖,生成新的虚拟dom,然后对比新旧虚拟dom进行渲染。

比较疑惑的是两种渲染看起来好似没什么差别,总感觉我描述的两个流程有问题,没有体现出差异,万望解惑,小编看好多大厂面试题都会提出这个问题,而网上大部分文章感觉总是读的一头雾水。。。

阅读 11.5k
3 个回答

探索Virtual DOM的前世今生
上面没有说具体实现的不同,细节可以看一下这个回答:
https://www.zhihu.com/questio...

react 函数式组件思想 当你 setstate 就会遍历 diff 当前组件所有的子节点子组件, 这种方式开销是很大的, 所以 react 16 采用了 fiber 链表代替之前的树,可以中断的,分片的在浏览器空闲时候执行

vue 组件响应式思想 采用代理监听数据,我在某个组件里修改数据,就会明确知道那个组件产生了变化,只用 diff 这个组件就可以了

都是 js 对象,没什么差别,只是生成虚拟dom的策略不一样。

react和vue的虚拟dom都是一样的, 都是用JS对象来模拟真实DOM,然后用虚拟DOM的diff来最小化更新真实DOM。

除了极个别实现外,两者前半部分(用JS对象来模拟真实DOM)几乎是一样的。

而对于后半部分(用虚拟DOM的diff来最小化更新真实DOM)两者算法也是类似的,包括replace delete insert等

虽然两者对于dom的更新策略不太一样, react采用自顶向下的全量diff,vue是局部订阅的模式。 但是这其实和虚拟dom并无关系
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏