这篇文章主要介绍了vue2和Vue3对比分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue2和Vue3对比分析文章都会有所收获,下面我们一起来看看吧。Vue2只支持单节点
,Vue3 template支持多节点
,类似react fragments变化
基本都在script中(Option api -> Composition api)不会再看见满屏的this了!!!style支持v-bind
Proxy代替definePropertydefineProperty无法实现对数组对象的深层监听,Proxy
是浏览器最新api,功能更加强大。不再支持IE,Vue2想享受Vue3带来的部分更新,可考虑升级Vue2.7
版本TypeScript的支持Vue2采用的是Facebook的Flow
,没法完美支持TypeScript
(所以项目初期技术选型很重要)Vue3 TypeScript完全重写
,提供和React一样的TS支持全新生态基本还是vue周边伴随Vue3升级那一套,但是状态管理推荐,由原来的Vuex变为Pina
全新的vite
支持,包括vitest
等,官方提供周边工具更多了其它优化性能更好,体积更小
就不用说了事件监听缓存
,类似@click绑定的函数,无需多次创建,放在了cacheHandler缓存中SSR
:Vue 3.0 会将静态标签直接转化为文本,相比 React 先将 JSX 转化为虚拟 DOM,再将虚拟 DOM 转化为 HTML,这一点Vue3的速度要快很多Use Hooks
放弃过去的mixins,使用Hooks解决过去mixins的一些缺点不再和vue2一样,完全对比两棵虚拟DOM树,Vue3采用动静结合
的方法,优化diff性能通过编译阶段对静态模板进行分析,编译生成 Block tree。更新性能由模版整体大小相关
=》与动态内容的数量相关
,这是一个非常大的性能突破。将代码提升到渲染函数之外,这样可以避免在每次渲染时重新创建这些对象,从而大大提高内存使用率并减少垃圾回收的频率。vue2poly-repo
vue2.x的源码托管在src目录中,然后依据功能拆分出了complier(模板编译的相关代码),core(与平台无关的通用运行时代码),platforms(平台专有代码),server(服务端渲染的相关代码)、sfc(.vue 单文件解析相关代码)、shared(共享工具代码) 等目录vue3mono-repo
package可以独立于
vue.js去使用,这样例如用户想要使用vue3.0的响应式,可以单独依赖reactive
,而不必依赖整个vue.js,减少引用包的体积,而vue2.x却做不到这一点。源码结构对比什么是组合式 API?- Vue官方
解决了过去组件过长时,optionsApi带来的难以维护的问题逻辑可以整块复用所有API都是import引入的,对Tree- shaking很友好,没用到功能,打包的时候会被清理掉,减小包的大小新的setup
选项在组件被创建之前执行,一旦props
被解析完成,它就将被作为组合式 API 的入口。可以当做Vue2的beforeCreate和create生命周期用可直接写await语法
SFC单文件组件中直接使用即可,或者也可以结合
export default
使用ref 用来创建基础类型
的响应式数据template中默认调用value显示数据,script中需要使用.value
调用和react ref差不多,react是.current获取值,vue3是.value。Ref的本质是通过Reactive创建的,Ref(10)=>Reactive({value:10})有一定的心智负担,尤大也明确说了不会支持script中直接访问。究其原因,还是基础类型无法拦截它的变化,当然也有大哥提出用new String(‘foo’)类似的语法对基础类型进行包装。个人感觉直接拿已支持的reactive来搞也不错Ref
ts定义import { type Ref } from 'vue';
isRef
判断是否为ref对象。一般是ref,toRef,toRefs创建的变量toRefs
将reactive对象
解构为单个响应式对象shallowRef
创建一个跟踪自身 .value 变化的 ref,但不会使其值也变成响应式的,简单理解为创建一个和ref相同结构的非响应式变量triggerRef
强制更新页面DOM。即使创建的ref没有变,想更新dom可以用customRef
提供类似于computed的get和set,免费云主机域名可自定义ref行为reactive 用来创建引用类型
的响应式数据reactive的本质是将每一层的数据都解析成proxy对象
reactive 的响应式默认都是递归的
,改变某一层的值都会递归的调用一遍,重新渲染dom。直接解构
,响应性会丢失,需要用toRefs
包裹。引用类型直接改变引用地址也会导致响应式丢失readonly
将reactive的值更改为只读shallowReactive
只能对浅层的数据响应 如果是深层的数据只会改变值 不会改变视图区别不大,把setup当created用,其它就当改了个名功能和vue2一致watch(监听参数,变化回调,配置参数)注意监听对象的单个属性:watch(() => articleInfo.author, (newVal) => {})
,第一个参数为箭头函数返回要监听的目标属性类似React useEffect,但是不需要写依赖项,只要我们回调中引用了响应式的属性
和watch的区别:同一个功能的两种不同形态,底层的实现是一样的watch 可以获取到新值与旧值(更新前的值),而watchEffect
是拿不到的。watch –显式
指定依赖源,watchEffect –自动
收集依赖源watchEffect 在组件初始化的时候就会执行一次用以收集依赖,watch指定了依赖,所以不需要。可以理解为watchEffect 就是配置了{ immediate: true } 的watch
使用场景:antfu小哥
:推荐在大部分时候用 watch 显式的指定依赖以避免不必要的重复触发,也避免在后续代码修改或重构时不小心引入新的依赖。watchEffect 适用于一些逻辑相对简单,依赖源和逻辑强相关的场景(或者懒惰的场景 )。更加灵活,可以在定义响应式变量时声明作用和vue2无差异通过进行引入defineAsyncComponent可配合Suspense 进行更多操作,可用于loading和骨架屏相关,和react Suspense基本一致。不过react Suspense基本一致这个属性都不太好用,vue的不清楚实际场景咋样Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术;类似于React 的 Portal
。之前写react是不怎么用这个属性,vue3这个估计也没多大用。主要解决的问题 因为Teleport节点挂载在其他指定的DOM节点下,完全不受父级style样式影响to 属性 插入指定元素位置,body,html,自定义className等等作用和vue2还是一样的,生命周期名称变了初次进入时:onMounted> onActivated退出后触发 deactivated再次进入:只会触发 onActivateddefineXxxx 无需import即可直接使用defineProps 代替过去的propsdefineEmits 代替过去的$emitdefineOptions 自定义一些组件属性,比如组件名称(需要插件支持)defineComponent 用于render函数、TSX、IDE提醒等defineExpose 子组件声明的数据,暴露给父组件直接用和vue2一致两者用法,除了pina没有Mutations,差别不大。但是官方推荐的东西,自然有它的各种优点Vuex: State、Gettes、Mutations(同步)、Actions(异步)Pinia: State、Gettes、Actions(同步异步都支持)Vuex4 用于 Vue3 ,Vuex3 用于 Vue2Pinia2.x 即支持 Vue2 也支持 Vue3可以让写react的兄弟,快速上手写vue3react中 {{}} => {}兼容的指令:v-model,v-if,v-show无需导入xxx,import { reactive,ref } from "vue";
,只需要用即可自定义组件名称,需要引入插件unplugin-vue-define-options
,并在vite中配置不使用插件,也可以通过多写一个script标签来单独写optionsvetur只支持vue2,volar只支持vue3,两者冲突。建议禁用vetur,格式化代码使用prettier,本地使用volar做代码高亮。或者通过项目配置,指定相关插件配置底层语法糖时间改变,之前vue2是update:input,vue3 是update:modelValue支持多个v-model支持自定义修饰符弃用.sync等created 元素初始化的时候beforeMount 指令绑定到元素后调用 只调用一次mounted 元素插入父级dom调用beforeUpdate 元素被更新之前调用update 这个周期方法被移除 改用updatedbeforeUnmount 在元素被移除前调用unmounted 指令被移除后调用 只调用一次比如这个v-move 封装自定义拖拽指令用了react hook的人都知道很香,vue3支持这个相当不错,能解决很多业务场景的封装
可以当做mixins写vueuse 官方,感谢评论区@rogepi 小哥的提醒ahooks-vuev3hooksVue3 究竟好在哪里?(和 React Hook 的详细对比)关于“vue2和Vue3对比分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue2和Vue3对比分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。
这篇文章主免费云主机域名要介绍“Vue中的侦听器watch怎么使用”,在日常操作中,相信很多人在Vue中的侦听器watch怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue中的侦听器watch怎么使用”的疑惑有所帮助!…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。