随着vue3.0的发布,不久后vue3.2紧接着发布了,现在uniapp也支持了vue3.2的编译。vue3.x的优点我在这里就不多说了,了解更多到uniapp官方vue3的教程。
从学习前端开始,学习的主要框架就是vue,一直以来也是vue的忠实粉丝。现在3.x的发布,让我感觉到它用在移动端上面是目前最好的选择,毕竟不需要考虑ie兼容。uniapp本身初衷就是为移动端而生,所以vue3.x用在uniapp上面,简直就是完美至极。
目前vue3.2在uniapp中暂时只支持h5,小程序端目前只支持到vue3.0,这只是时间的问题,uniapp的小程序肯定会支持vue3.2的,那么我们可以先拿h5来预热吧!uniapp中的vue3.2的用法在vue-cli脚手架项目中是完全一样,放心学习。
(2020年2月22日补充:) 果然不出所料,上面之前写的就不删除了,留个纪念吧。在uniapp上几个版本已经全面支持了vue3.2了,小程序也不例外啦。正好最近用vue3.2开发了一款小程序“皮皮虎去水印”,开发的很爽!!!
vue3.2改进了 setup语法糖,怎么使用怎么爽! vue3.2的一些特性在vue3.0的基础上做出了改动,这篇文章直接总结vue3.2的特性,接下来就让我们快速体验vue3.2。
下面讲解的内容不局限于vue3.2做出的改动,部分写法已在vue3.0中改动。
从vue3.2开始setup直接写在script标签上面,意味着所有的js代码直接在script中间完成。setup语法糖在vue的将来绝对是一种趋势,而且这种趋势已经到来。
是一种编译时语法糖,可在 SFC 内使用Composition API 时极大地提升工作效率。在
script
中声明的
js变量,template模板中可以直接读取使用,后面会有大量相关案例展示。
虽然3.x写法上与2.x的script里面的代码相差很大,但是生命周期还是必不可少,毕竟在开发的过程中还是有需求不同阶段进行处理逻辑。
特性:在2.x的生命周期钩子前面加上“on”来访问组件的生命周期钩子。
了解更多vue3.x生命周期钩子
vue2.x与vue3.x生命周期的区别:
选项式 API | Hook inside setup |
---|---|
beforeCreate |
Not needed* |
created |
Not needed* |
beforeMount |
onBeforeMount |
mounted |
onMounted |
beforeUpdate |
onBeforeUpdate |
updated |
onUpdated |
beforeUnmount |
onBeforeUnmount |
unmounted |
onUnmounted |
errorCaptured |
onErrorCaptured |
renderTracked |
onRenderTracked |
renderTriggered |
onRenderTriggered |
activated |
onActivated |
deactivated |
onDeactivated |
Tips: 因为setup
是围绕beforeCreate
和 created
生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写。
reactive
转换代理对象。Object.defineProperty()
的get
与set
来完成响应式(数据劫持)。const v = ref(999);
consle.log(v.value);// 这样获取的值是 999
const data = reactive({
a:1,
b:2
});
consle.log(data);// 这样获取的值是{a:1,b:2}
computed与vue2.x的配置项一致
{{fullname1}}
{{fullname2}}
1. watch函数
watch的配置项与vue2.x中watch一致。
注意的坑:在uniapp中,newValue和oldValue不要写成new和old,否则会报错。
情况一: 监视单个ref定义的响应式数据:
情况二: 监视多个ref定义的响应式数据:
情况三: 监视多个reactive定义的响应式数据:
{deep:false}
无效。
情况四: 监视reactive定义的响应式数据中的某个属性:
情况五: 监视reactive定义的响应式数据中的多个属性:
情况六: 监视reactive定义的数组:
情况七: 监视vuex中的值:
2. watchEffect函数
局部注册
全局注册
main.js:
import son from '/pages/index/components/son.vue'
export function createApp() {
const app = createSSRApp(App)
app.component('my-son',son)
app.use(store)
return {
app
}
}
组件中使用:
1. props/emit
父组件father.vue
父亲的值:{{v}}
子组件son.vue
son中接受父亲的值:{{v}}
基本套路:
// 父组件中
provide('值',值);
// 子组件中
const v = inject('值');
注意:
父组件father.vue
父亲的值:{{v}}
子组件son.vue
从父组件读取的值:{{count}}
孙组件grandChild.vue
孙组件接收爷爷的值:{{count}}
readonly
带颜色的文字
注意: uniappp中获取路由信息的方式不能用useRoute和useRouter,官方给出的方案是用getCurrentPages,如下:
vue-cli脚手架搭建的项目可以使用useRoute和useRouter,如下:
1. vue2.x中部分全局API和配置
比如:注册全局组件、注册全局指令等。
//注册全局组件
Vue.component('MyButton', {
data: () => ({
count: 0
}),
template: ''
})
//注册全局指令
Vue.directive('focus', {
inserted: el => el.focus()
}
2. vue3.x中对这些API做出了调整
将全局的API,即:Vue.xxx调整到应用实例(app)上。
2.x 全局 API(Vue ) |
3.x 实例 API (app ) |
---|---|
Vue.config.xxxx | app.config.xxxx |
Vue.config.productionTip | 移除 |
Vue.component | app.component |
Vue.directive | app.directive |
Vue.mixin | app.mixin |
Vue.use | app.use |
Vue.prototype | app.config.globalProperties |
1. vue2.x中的Options API 存在的问题
使用传统Options API中,新增或者修改一个需求,就需要分别在data,methods,computed里修改。
1. vue2.x中的Composition API的优势
使用Composition API中,我们可以更加优雅的组织我们的代码,函数。让相关功能的代码更加有序的组织在一起。
----- 看完啦别忘记点赞哟,您的赞就是对我最大的肯定 END -----
如果任何疑问的可以在评论区留言或者私聊。
也可以扫下面二维码加我wx,备注‘地区-名字-技术类型’,我会拉进我的微信技术分享群。注意:必须备注清楚哈。
也可以加QQ群交流:568984539,加群备注‘地区-名字-技术类型’。
更多前端、uniapp、nodejs等相关知识可关注我个人博客:https://blog.csdn.net/qq_42961150?spm=1011.2124.3001.5343