参考文章
1. https://zhuanlan.zhihu.com/p/85343099 2. https://juejin.im/post/5d977f47e51d4578453274b3 3. https://zhuanlan.zhihu.com/p/68477600API文档
https://composition-api.vuejs.org/zh/api.html总结
1、全面使用Typescript 2、响应式底层从 Object.defineProperty 变成 Proxy
Object.defineProperty =>https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty Proxy => https://es6.ruanyifeng.com/#docs/proxy3、hooks =>参照react16.8新特性
项目创建
无论是创建2.x的项目还是3.0的项目,都是通过@vue/cli脚手架来创建vue2.x项目转换成3.x的方式
1, 方式1 =>https://github.com/vuejs/composition-api 通过安装包 @vue/composition-api,然后在main.js中导入,最后使用Vue.use(xxx),就可以使用Vue3.x的语法 适合还需要使用到基于Vue2.x的第三方插件,比如ElementUI 2, 方式2 => https://github.com/vuejs/vue-next vue add vue-next 完完全全使用vue3.x的生态(vue、vue-router、vuex都是最新版的),可能会找不到合适的基于Vue3.x的插件,比如ElementUItemplate 和 style 几乎无差别
script
1, data
vue2.x data() { return {} } 实现响应式 定义在data中 使用Vue.set实现响应式 vue3.x import { reactive } from 'vue' setup (props) { const state = reactive({ title: 'Hello Vue3.0' }) return state } 实现响应式 从vue包中导入 toRefs 函数,并且在导出state的时候,进行包裹 setup (props) { const state = reactive({ title: 'Hello Vue3.0' }) return { ...toRefs(state), xxx } }2, methods
vue2.x methods: { 方法 } vue3.x 写在setup函数中,在 state 中定义好方法,并且一定要在return中返回 记得要把返回的state数据,通过toRefs变成响应式的数据,否则不会起作用 return { ...toRefs(state), play }3, computed
vue2.x computed: {计算属性函数} vue3.x 方式1 写在setup函数中 const getDoubleNum = computed(() => state.num * 2) 方式2 写在state中 const state = reactive({ myName: computed(() => 'my name is HuangWei --- vue3.x') }) 两种方式都需要从vue包中导入 computed 函数,如果是写在setup函数中,要记得最后return的时候,返回计算属性函数4, 生命周期函数
vue2.x => created、mounted、beforeDestory、Destoryed … 和 data同级
vue3.x => 写在setup函数中,onCreated、onMounted、onBeforeUnmount、onUnmounted …
5, 组件传值
vue2.x 父传子 props 子传父 this.$emit 兄弟组件传值 公共bus
vue3.x 父传子 父组件 provide => provide(‘名字’,值) 子组件 inject => inject(‘名字’)
vue2.x 导入vue、vue-router,然后Vue.use(VueRouter),通过 new VueRouter() 创建路由对象,里面通过routes设置路由规则,并且最终导出
vue3.x
从vue包中,按需导入 createRouter 函数,通过 createRouter创建路由对象,里面通过routes设置路由规则,并且最终导出编程式导航 & 路由参数获取 编程式导航=> 从 vue-router 包中导入 useRouter 函数,然后在setup函数中使用useRouter函数创建出router对象,然后就可以调用对应的push等方法实现编程式导航了 路由参数获取 => 从 vue-router 包中导入 useRoute 函数,然后在setup函数中使用 useRoute 函数创建出route对象,然后通过route.params.xxx、route.query.xxx 就可以获取到路由参数了vue2.x
导入vue、vuex,然后Vue.use(Vuex),通过new Vuex.Store() 创建store对象,里面写好state、getter、mutation、action、module,并且最终导出store。
vue3.x
从vuex包中,按需导入 createStore 函数,通过 createStore() 创建store对象,里面写好state、getter、mutation、action、module,并且最终导出store。组件中使用store的时候,需要从 vuex 包中导入 useStore 函数,然后在setup函数中使用useStore函数创建出store对象,然后就可以使用了。摘自 => https://www.bilibili.com/video/BV1ui4y137WP?p=1 段老师的xmind