从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例,this 此时是 undefined
<template>
生命周期
</template>
<script lang='ts'>
export default {
setup() {
console.log("setup")
console.log(this)
},
beforeCreate() { //不建议使用
console.log("beforeCreate")
console.log(this)
},
created() { //不建议使用
console.log("created")
console.log(this)
}
}
</script>
结果:
模板中需要使用的数据和函数,需要在setup()中返回。
<template>
<h2>{{ count }}</h2>
<button @click="addFun1">count++</button>
<button @click="addFun2()">count++</button>
</template>
<script lang='ts'>
import { ref } from 'vue'
export default {
setup() {
const count = ref(10)
const addFun1=()=> { // 函数定义方式一
count.value++;
}
function addFun2() { //函数定义方式二
count.value++;
}
return {
count,
addFun1,
addFun2
}
}
}
</script>
注:若要在setup内执行ref,toRefs, computed,watch,watchEffect等函数,需先引入
import { toRefs, ref, onMounted, nextTick } from "vue";
setup可接受props、context两个参数,其中props是响应式数据,不能直接解构赋值;context不是响应式数据,可以直接解构赋值。
props:['test']
setup(props,context){
//const {test} = props //错
const {test} = toRefs(props) //对
const { attrs, slots, emit }= context //对
return {
test
}
}