首页 > 编程语言 >react diff算法和vue的区别

react diff算法和vue的区别

时间:2024-04-30 10:46:50浏览次数:27  
标签:vue dom react 遍历 diff 节点

区别

相同点

  • 都是两组虚拟dom的对比(react16.8之后是fiber与虚拟dom的对比)
  • 只对同级节点进行对比,简化了算法复杂度
  • 都用key做为唯一标识,进行查找,只有key和标签类型相同时才会复用老节点
  • 遍历前都会根据老的节点构建一个map,方便根据key快速查找

不同点

  • react在diff遍历的时候,只对需要修改的节点进行了记录,形成effect list,最后才会根据effect list 进行真实dom的修改,修改时先删除,然后更新与移动,最后插入
  • vue 在遍历的时候就用真实dominsertBefore方法,修改了真实dom,最后做的删除操作
  • react 采用单指针从左向右进行遍历
  • vue采用双指针,从两头向中间进行遍历
  • react的虚拟diff比较简单,vue中做了一些优化处理,相对复杂,但效率更高

链接:https://juejin.cn/post/6978370715573714952

标签:vue,dom,react,遍历,diff,节点
From: https://www.cnblogs.com/xiaoyaoweb/p/18167504

相关文章

  • Vue3+Ts i18n实现国际化
    1、下载依赖npminstallvue-i18n@nex2、在src目录下创建文件夹创建文件index.ts、zh/index.ts、en/index.ts //index.tsimport{createI18n}from'vue-i18n'importzhfrom'./zh/index'importenfrom'./en/index'constmessages={en,zh,}......
  • vue.js 3 初学经验:开发环境搭建,Windows,nginx
    Windows11nginx-1.20.0"vue":"^3.4.21"--- 序章vue3开发,不需要后端服务业是可以的。在需要后端服务时,使用nginx来转发请求是很好的(个人开发者)。 注,还有什么其它方式吗?注,本文的后端服务是使用Java开发的HTTP接口。注,参考资料#2介绍了多个vue.js3.0项目......
  • 在vue2中,什么是双向绑定,为什么vue3要进行优化?
    一、什么是双向绑定我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新双向绑定就很容易联想到了,在单向绑定的基础上,用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定举个栗子 当用户填写表单时,View......
  • vue3中ctrl加回车换行,光标位置设置
    <input v-model="text" type="textarea"@click="sbwz"@keydown="keysbwz" @keydown.enter.ctrl.exact.prevent="ctrlEnter" /> //暂存光标位置,后续截取换行使用consttextSplit=ref(0)//判断是否改变了上次光标位置constisTest=r......
  • react 初学遇到的问题
    1.useEffect依赖项变化时并没有执行源码useEffect(()=>{constselectedComp=selects.find(select=>select.value===selected);selectedComp&&setSelectedComp(selectedComp);},[selected,selects,selectedComp]);分析从提供的代码片段来看,这一行代码......
  • vue3 把quill的base64变成图片地址
      你可以看看https://www.kancloud.cn/liuwave/quill/1434141或者看看别人的文章我的项目是vu3的 template的是这样的<el-form-itemlabel="中文详情"prop="content"><div><quill-editorref="QuillEditor"v-model:content="form.......
  • Nuxt2项目Js文件使用Vuex
    背景当前项目是Nuxt2框架,建立了Vuex仓库。通过返回一个函数的形式,建立Vuex代码如下importVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex)conststore=()=> newVuex.Store({ state:{ name:'abc' }, mutations:{ setName(state,data){ ......
  • vue:子组件从后台获取数据期间,父组件被遮罩覆盖
    效果:父组件代码<template><el-containerv-loading="loading"class="container"element-loading-background="rgba(1,35,54,0.8)"><h1>这是父组件</h1><HelloWorldmsg="Welcometo......
  • Vue3中SEO优化实践:利用unhead vue插件设置Mate标签
    我们在构建Vue3项目时,搜索引擎优化(SEO)是一个不可忽视的重要方面。优化网站结构、内容和代码,使其更符合搜索引擎的排名规则,对于提升网站曝光度和吸引更多用户至关重要。其中,设置合适的Mate标签(如标题、描述和关键词)是SEO优化的关键步骤之一。在Vue3项目中,我们可以利用unhead插件来......
  • uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈
    原创研发uniapp+vue3+pinia2跨三端仿微信app聊天模板Uniapp-Wechat。uni-vue3-wchat基于uni-app+vue3+pinia2+uni-ui+uv-ui等技术跨端仿制微信App界面聊天项目,支持编译到H5+小程序端+App端。实现编辑框多行消息/emoj混合、长按触摸式仿微信语音面板、图片/视频预览、红包/朋友圈......