1.API 风格:选项式 vs 组合式总结 选项方和组合式的区别对比维度Vue2 选项式 API Vue3 组合式 API(setup 函数 / setup 语法糖) this 指向组件实例例setup() 中没有 this,完全基于函数式编程思想代码拆分灵活性难以将同一功能的逻辑拆分到多个文件可轻松将逻辑提取为独立的组合函数(composables)并跨组件复用Vue2 filteredUsers" :key="user.id"> {{ user.name }}
当我们获取路由参数时,通常在模板中使用 $route ,在逻辑中调用 useRoute() 方法,如:
这将会删除之前已经添加的路由,因为他们具有相同的名字且名字必须是唯一的 router.addRoute({ path: '/other', name: 'about', component: Other }) 3、
我们可以通过 vue-router 自定义路由切换时页面如何滚动。比如,当跳转到新路由时,页面滚动到某个位置;切换路由时页面回到之前的滚动位置。
例如,从 /users/2 进入到 /users/3 或者从 /users/2#info 进入到 /users/2#projects 不会触发。
如果想要在路由组件上使用转场,对导航进行动画处理,我可以使用 v-slot 结合 Animete.css 来实现:
vue3 出来之后,不管是什么样的公司,不管是想体验新技术也好还是跟风也好(个人觉得跟风比重更大),只要是新开项目大都会选择 vue3,紧随而来的 vue3 和 vue2 的区别肯定是要了解。 还有一点是更好的把相关功能合并在一块,有一张图片很直观的表示: 全面支持 typescript 整个 vue3 全部是 typescript 编写,开发工具 vscode 也已经有了各种插件支持整个 响应式api改变 vue2使用的是Object.definepropert: 必须递归监听所有属性,新增属性无法监听($set) 数组下标和长度变化无法监听(采用对数据进行劫持 结合发布订阅模式来实现) 兼容性好 vue3使用Proxy: 懒监听,只监听第一层,当你调用到才监听之后的数据(赋值的时候obj.a = 2,obj.a会先get获取) 新增属性和数组新增修改可以直接监听 不兼容IE11 这是几个比较大的改变
---- vue框架 路由模式 Vue3 中不再使用 new Router() 创建 router ,而是调用 createRouter 方法: import { createRouter } from uni-app框架 存储数据写法vue2 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); const store = new Vuex.Store({ state:{ "username":"xiaomi", "age":22 } }) export default store 存储数据写法vue3 = createStore({ state:{ "username":"xiaomi", "age":22 } }) export default store 引入数据写法vue2 $mount() 引入数据写法vue3 import App from './App' import store from '.
vue2/3 生命周期 整体来看,变化不大,只是名字大部分需要+ on,功能上类似。 使用上 Vue3 组合式 API 需要先引入,而 Vue2 选项 API 则可直接调用,如下所示。 # 响应式原理 Vue2 响应式原理基础是`Object.defineProperty` Vue3 响应式原理基础是`Proxy` ## Object.defineProperty 基本用法:直接在一个对象上定义新的属性或修改现有的属性 根据*尤大*直播可以知道如今 Vue3 将所有运行功能打包也只有22.5kb,比 Vue2 轻量很多。 /src/App' createApp(App).mount('#app') TypeScript 支持 Vue3 由TS重写,相对于 Vue2 有更好地TypeScript支持。
Vue 3 的 Template 支持多个根标签,Vue 2 不支持 Vue 3 有 createApp(),而 Vue 2 的是 new Vue() createApp(组件),new Vue({template 事件名必须为"update:x" 效果: <Switch :value="y" @update:value="y=$event"/> vue2中的写法 <Switch :value.sync="y"/ 74ee78-1628264866650)]attrs"批量绑定属性 使用 const {size, level, ...rest} = context.attrs 将属性分开 5.1 使用场景 在vue2 (image-b910f3-1628264866650)] [图片上传失败... Bolean类型的,但我们通过attrs却得到的是空字符串,而第二张我们通过props指定了diabled为Boolean值我们就可以通过props拿到我们需要的true 6.slot具名插槽的使用 vue2
3、当一个被依赖的可观察对象被赋值时,它会通知notify所有订阅自己的watcher重新求值,并触发相应的更新,即watcher对象中关联的DOM改变渲染。 2、data(初始数据) 3、props(接受的外部参数) 4、methods(方法) 5、lifecycle hooks(生命周期钩子函数) 6、assets(私有资源) 最核心最优秀的来了 vue2.0 答案是: 因为有react优秀在前,如果vue2.0不能跟上这个优秀的框架还固步自封的话,必将没落。 Vue2.0的缺点是他的敌人比他更加优秀。 性能比react低。 Router: 适应vue3的已经出来了,后续我也得去跟进学习下,项目里已经用了,但是改版的区别没仔细分析。 Cli 很超前的做了vue3的工作,目前项目可以直接用cli创建,非常感谢这些团队给我们这些小白减低了很大的学习难度。
如果你的vue2代码之前是使用vue-class-component 类组件模式写的。 如果你之前的vue2 版本使用的是 @vue/composition-api,那么 Vue Demi 以后可以无缝升级vue3.Vue Demi 是一个很棒的包,具有很多潜力和实用性。 } }}参考文章:使用 Vue Demi 构建通用的 Vue 组件库 https://developer.51cto.com/article/700797.html一库】vue-demi: 一拳打穿vue2 和3的版本次元壁 https://juejin.cn/post/7032860019880099847Vue Demi https://madewith.cn/502转载本站文章《vue2升级vue3: Vue Demij打通vue2与vue3壁垒,构建通用组件》,请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/vue3/8866.html
vue3 不同构建版本 Vue3中不再构建UMD模块化的方式,因为UMD会让代码有更多的冗余,它要支持多种模块化的方式。 Vue3中将CJS、ESModule和自执行函数的方式分别打包到了不同的文件中。在packages/vue中有Vue3的不同构建版本。 作为配置项使用:https://v3.cn.vuejs.org/guide/component-provide-inject.html 组合式API中使用:https://v3.cn.vuejs.org 的改变 官方文档:https://v3.cn.vuejs.org/guide/migration/v-model.html#%E4%BD%BF%E7%94%A8-v-bind-sync 在 3.x 中, 14.整个对象的替换,保持响应式 不管是vue2还是3,对于响应式对象的替换和修改都只能在对象内部进行,而不能直接去替换这一整个响应式对象,例如vue2中data返回的对象,直接替换之后就成为一个普通对象了
Vue({ // 通常判断这是不是CDN版本,只需要看对象是不是Vue data() { return { count: 0, info: { name: 'Vue2 在现代 Vue 3 项目里,一般不会直接用 new Vue(),而是用 createApp(App) 来创建应用实例。 -- Vue 3 支持多根节点(Fragment) --></template>特点:Vue 3 支持 Fragment,组件返回多个根节点,减少无意义的包裹元素。 " />特点:Vue 3 支持自定义 prop 名的多 v-model 绑定,方便父子组件双向绑定。 工具链和生态项目Vue 2Vue 3Vue Routerv3v4(Vue 3 专用)Vuexv3v4构建工具Vue CLIVite 推荐,热更新更快,打包更轻量社区插件多基于 Vue 2需要迁移或支持
Vue2 和 Vue3 的路由配置有一些不同,本文将详细介绍如何在这两个版本中配置路由,并解释每段代码的作用。 Vue2 路由配置 安装 Vue 和 Vue Router 首先,确保已经安装了 Vue 和 Vue Router。 对于 Vue2,使用 vue-router@3 版本: npm install vue@2 vue-router@3 创建路由文件 在 src 目录下创建一个 router 文件夹,然后在其中创建一个 总结 虽然 Vue2 和 Vue3 的路由配置略有不同,但整体结构和概念是相似的。Vue2 使用 vue-router@3,而 Vue3 使用 vue-router@4。 通过本文的详细介绍和代码示例,你应该可以掌握在 Vue2 和 Vue3 中配置路由的方法,并理解每段代码的作用。希望这篇博客能够帮助你快速上手 Vue 路由配置。
vue2与vue3的区别响应式系统(Reactivity System)Vue2Vue 2 :使用 Object.defineProperty 来实现数据的响应式。 $data, 'newMessage', 'New Hello'); }});Vue3Vue3:使用 Proxy,允许对整个对象进行代理,而不是逐个属性定义 Proxy 和 setter。 因此 Vue 3 可以更好地处理动态添加的属性,性能也更好。 3 :支持 Fragment,允许组件返回多个根节点。 }; }};性能优化和模块化改进Vue2状态管理Vue2:使用Vuex,通过 state、getters、mutations 和 actions 组织,采用单一的全局状态树,所有状态集中在一个地方,
Vue2 和 Vue3 的路由配置有一些不同,本文将详细介绍如何在这两个版本中配置路由,并解释每段代码的作用。 Vue2 路由配置 安装 Vue 和 Vue Router 首先,确保已经安装了 Vue 和 Vue Router。 对于 Vue2,使用 vue-router@3 版本: npm install vue@2 vue-router@3 创建路由文件 在 src 目录下创建一个 router 文件夹,然后在其中创建一个 总结 虽然 Vue2 和 Vue3 的路由配置略有不同,但整体结构和概念是相似的。Vue2 使用 vue-router@3,而 Vue3 使用 vue-router@4。 通过本文的详细介绍和代码示例,你应该可以掌握在 Vue2 和 Vue3 中配置路由的方法,并理解每段代码的作用。希望这篇博客能够帮助你快速上手 Vue 路由配置。
Vue3作为Vue2的升级版本,带来了许多新特性和改进,这篇文章主要讲下vue3的模板指令方面,Vue模板指令是Vue框架中用于实现数据绑定和条件渲染的重要机制。 但在Vue 3 版本中 v-if 总是优先于 v-for 生效。 不管再vue2中还是vue3中都都要避免同时使用v-if 和 v-for,可以用以下几种方法计算属性过滤的v-if所限制的条件初始化list数据时先用filter根据条件进行筛选过滤通过嵌套标签包裹,将 v-for和v-if分别加在不同标签上vue2vue3v-bind 合并行为在vue2 中 v-bind 和 attribute,书写顺序无论先后,attribute总是覆盖v-bind而 而在vue3 vue2 中案例说明<template>
前言 2020年9月18日,vue3正式版发布了,前几天把文档整体读了一遍,感触很深,可以解决我项目中的一些痛点,于是就决定重构之前那个vue2的开源项目。 本篇文章就记录下重构vue2项目的过程,欢迎各位感兴趣的开发者阅读本文。 image-20201006154454592 项目目录对比 按照上述步骤,即可创建一个vue3的项目,接下来我们将需要重构的vue2项目的目录与上面创建的项目进行下目录对比。 项目重构 接下来,我们来一步步把vue2项目的文件迁移到vue3项目中,修改不合适的地方,让其适配vue3.0。 可能vue3的模版语法默认是启用jsx的吧。
vue2和vue3响应式原理 vue2响应式原理 对象类型:通过Object.defineProperty(obj,property,descriptor)对属性的读取、修改进行拦截(数据劫持)。 addEventListener("input", function () { newObj.demo = this.value; }); </script> vue3响应式原理 `); return delete target[propName]; }, }); v3响应式demo