Vue工程setup函数详解

Vue工程setup函数详解

一、简介

Vue3 的一大特性函数 —- setup
  1、setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的
  2、setup函数是 Composition API(组合API)的入口
  3、在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

二、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<template>
<div>
<div>{{ readersNumber }}</div>
<el-button type="primary" @click="onClick">自定义点击事件</el-button>
</div>
</template>

<script>
/* 方式一:(script 右边写上 setup)*/
// import {onBeforeMount, ref} from "vue";
// const readersNumber = ref('绿色回收')
// const onClick = () => {
// console.log(readersNumber.value)
// if (typeof readersNumber.value === "string") {
// console.log('string')
// } else {
// console.log('other')
// }
// // alert(readersNumber)
// }
// onBeforeMount(() => {
// console.log('数据渲染前')
// })


/* 方式二:*/
// import {onBeforeMount, ref} from "vue";
// export default {
// name: "OrderForm_BP",
// setup() {
// const readersNumber = ref('OrderForm_BP')
// const onClick = () => {
// console.log(readersNumber.value)
// if (typeof readersNumber.value === "string") {
// console.log('string')
// } else {
// console.log('other')
// }
// // alert(readersNumber)
// }
// onBeforeMount(()=>{
// console.log('数据渲染前')
// })
// return {
// onClick,
// readersNumber,
// }
// }
// }

/* 方式三:*/
import {reactive, toRefs} from "vue";

export default {
name: "SetupDemo",
setup() {
const data = reactive({
readersNumber: "",
userList: [],
tableList: [],
})
const onClick = function () {
console.log(data.readersNumber, '自定义点击事件')
data.readersNumber = 'readersNumber数据'
if (data.readersNumber === "readersNumber") {
console.log('string')
} else {
console.log('other')
}
}
return {
//解构
...toRefs(data),
onClick
}
}
}

</script>

<style scoped>

</style>

三、说明

NO.1 setup写在script标签内。

使用ref绑定数据,无需export,import的组件页面内可以直接使用,但需要反复const,ref数据。调用数据{数据名}.value。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script setup>
import {onBeforeMount, ref} from "vue";
const readersNumber = ref('setup写在script标签内')
const onClick = () => {
console.log(readersNumber.value)
if (typeof readersNumber.value === "string") {
console.log('string')
} else {
console.log('other')
}
// alert(readersNumber)
}
onBeforeMount(() => {
console.log('数据渲染前')
})

</script>

NO.2 setup写在js中。

使用ref绑定数据,事件和数据都需要return出去。调用数据{数据名}.value。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
import {ref} from "vue";
export default {
name: "SetupDemo",
setup() {
const readersNumber = ref('setup写在js中')
const onClick = () => {
console.log(readersNumber.value)
if (typeof readersNumber.value === "string") {
console.log('string')
} else {
console.log('other')
}
// alert(readersNumber)
}
return {
onClick,
readersNumber,
}
}
}
</script>

NO.3 setup写在js中,使用reactive打包页面内数据,再使用toRefs解构。

避免数据反复const和return,事件需要return出去。调用数据data.{数据名}。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script>
import {reactive, toRefs} from "vue";

export default {
name: "SetupDemo",
setup() {
//data可以自定义名字
const data = reactive({
readersNumber: "setup写在js中"
})
const onClick = function () {
console.log(data.readersNumber, '自定义点击事件')
data.readersNumber = 'setup写在js中'
if (data.readersNumber === "readersNumber") {
console.log('string')
} else {
console.log('other')
}
}
return {
//解构
...toRefs(data),
onClick
}
}
}
</script>

四、PS:关于vue3生命周期介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<script>
import {onBeforeMount, onBeforeUnmount, onBeforeUpdate, onMounted, onUnmounted, onUpdated, reactive, toRefs} from "vue";

export default {
name: "SetupDemo",
setup() {
const data = reactive({
readersNumber: "",
})
const onClick = function () {
console.log(data.readersNumber, '自定义点击事件')
data.readersNumber = 'readersNumber'
if (data.readersNumber === "readersNumber") {
console.log('string')
} else {
console.log('other')
}
}
//生命周期
onBeforeMount(() => {
console.log('数据渲染前')
})
onMounted(() => {
console.log('渲染结束')
})
onBeforeUpdate(() => {
console.log('页面Dom更新之前')
})
onUpdated(() => {
console.log('页面Dom更新之后')
})
onBeforeUnmount(() => {
console.log('Vue实例销毁之前')
})
onUnmounted(() => {
console.log('Vue实例销毁之后')
})
return {
//解构
...toRefs(data),
onClick
}
}
}
</script>
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 何福海
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信