Vue3 正式版本已经更新,再次入坑。
# 全局安装
cnpm i -g create-vite-app
#
create-vite-app vue3-res
cd vue3-res
cnpm i
# 用 vscode 打开
import Vue from "vue"
import App from './App.vue'
const app = new Vue({
render: (h) => h(App)
})
app.$mount("#app")
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.mount('#app')
Vue2 | vue3 | |
---|---|---|
beforeCreate | setup() | setup() :开始创建组件之前,在beforeCreate和created之前执行。创建的是data和method |
created | setup() | |
beforeMount | onBeforeMount | 组件挂载到节点上之前执行的函数。 |
mounted | onMounted | 组件挂载完成后执行的函数。 |
beforeUpdate | onBeforeUpdate | 组件更新之前执行的函数。 |
updated | onUpdated | 组件更新完成之后执行的函数。 |
beforeDestroy | onBeforeUnmount | 组件卸载之前执行的函数。 |
destroyed | onUnmounted | 组件卸载完成后执行的函数 |
activated | onActivated | 被包含在 |
deactivated | onDeactivated | 比如从 A 组件,切换到 B 组件,A 组件消失时执行。 |
errorCaptured | onErrorCaptured | 当捕获一个来自子孙组件的异常时激活钩子函数。 |
Vue.component('SearchInput', SearchInputComponent)
Vue.directive('focus', FocusDirective)
Vue.use(LocalePlugin)
const app = Vue.createApp({})
app.component('SearchInput', SearchInputComponent)
app.directive('focus', FocusDirective)
app.use(LocalePlugin)
//或者
Vue.createApp({})
.component('SearchInput', SearchInputComponent)
.directive('focus', FocusDirective)
.use(LocalePlugin)
由于vue3.0的其他语法跟vue2.x的语法几乎是完全兼容的,所以接下来主要介绍使用composition-api
Composition API 主要介绍一下几个函数:
将传入的对象生成新的深度响应式对象,其不等于原始对象
const obj = reactive({
count: 0,
books:['三体','人生','黄金时代']
})
将传入的简单数据值生成新的响应式对象
const count = ref(0)
console.log(count.value) // 0
count.value++
console.log(count.value) // 1
使用 getter 函数,并为从 getter 返回的值返回一个不变的响应式 ref 对象。
const count = ref(1)
const plusOne = computed(() => count.value + 1)
console.log(plusOne.value) // 2
plusOne.value++ // error
在响应式地跟踪其依赖项时立即运行一个函数,并在更改依赖项时重新运行它。
const count = ref(0)
watchEffect(() => console.log(count.value))
// -> logs 0
setTimeout(() => {
count.value++
// -> logs 1
}, 100)
// 侦听一个getter
const state = reactive({ count: 0 })
watch(
() => state.count,
(count, prevCount) => {
/* ... */
}
)
// 直接侦听一个ref
const count = ref(0)
watch(count, (count, prevCount) => {
/* ... */
})
注意:在setup函数中不存在this,带入参数 props 和 setupContext
在setup函数使用 Composition API:
import { reactive, ref, computed, watchEffect, toRefs, onMounted, onUpdated, onUnmounted } from 'vue'
export default {
props: ['msg'],
data(){
return {
school:{
year:2020,
name:'花园小学'
}
}
},
setup(props, context) {
let count = ref(1)
const data = reactive({
numer: 0,
books:['三体','人生','黄金时代']
})
function add() {
count.value++
}
//声明周期函数
onMounted(() => {
console.log('mounted!')
})
onUpdated(() => {
console.log('updated!')
})
onUnmounted(() => {
console.log('unmounted!')
})
const refData = toRefs(data); // 保证后面结构后依然保持响应式
return { ...refData, count, add}
},
mounted() {
console.log('number:',this.numer);
console.log('count:',this.count);
console.log('add:',this.add);
console.log('school:',this.school);
},
methods:{
handleClick(){
console.log('handleClick');
}
}
}
主要参考文献:
vue3.0中文文档