Vue3 组合式 API(Composition API) 主要用于在大型组件中提高代码逻辑的可复用性。
传统的组件随着业务复杂度越来越高,代码量会不断的加大,整个代码逻辑都不易阅读和理解。
Vue3 使用组合式 API 的地方为 setup。
在 setup 中,我们可以按逻辑关注点对部分代码进行分组,然后提取逻辑片段并与其他组件共享代码。因此,组合式 API(Composition API) 允许我们编写更有条理的代码。
setup 函数
setup函数启动页面后自动执行的一个函数,项目中所有定义的变量、方法都需要写在setup函数中,需要注意的是,所有setup函数中定义的变量和方法最后都需要return出去,否则无法在视图中使用。
ref函数
当ref里的值发生改变的时候,视图层也会跟随更新(响应式数据)ref可以操作基本数据类型,也可以操作复杂数据类型:对象 数组。
建议:使用ref操作基本数据类型:数字和字符串
reactive函数
reactive同样也是为我们创建一个响应式的引用,不同的是reactive不能用作到基本数据类型上。 reactive主要是作用在复杂的引用数据结构数据上,例如多维数组及对象,reactive可以响应深层次数据,reactive返回一个proxy代理对象,使用上和ref稍有区别。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<div>{{tree}}</div>
<div v-for="i in arr">{{i}}</div>
<br>
<div v-for="i in data.person">{{i}}</div>
=====================
<div>{{mark}}</div>
<div>{{mark}}</div>
<div>{{mark}}</div>
</div>
</body>
</html>
<script type="text/javascript" src="js/vue.global.prod.js"></script>
<script type="text/javascript">
const {createApp,reactive,toRefs,ref,toRef} = Vue
const app = createApp({
setup(){
let tree = ref('小树苗');
const arr = ref(['苹果','香蕉','橘子'])
const person = ref({
name:'张三',
age : 50,
mark: '法外狂徒12'
})
const data = reactive({
person:{
name:'张三',
age : 50,
mark: '法外狂徒123123'
}
})
let mark = toRef(data.person,'mark')
return {tree,arr,person,mark,data}
}
}).mount('#app')
</script>
computed函数
基本的计算函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性</title>
</head>
<body>
<div id="app">
{{m()}}
{{c}}
</div>
</body>
</html>
<script type="text/javascript" src="js/vue.global.prod.js"></script>
<script type="text/javascript">
const {createApp,reactive,toRefs,computed} =Vue
const app = createApp({
setup(){
const data = reactive({
List: ["占山","李四"]
})
const m = () =>{
return data.List.length >0 ? '有中文': '没中文'
}
const c = computed(() => {
return data.List.length >0 ? '有中文': '没中文'
})
return{...toRefs(data),m,c}
}
}).mount("#app")
</script>
vue声明周期(重要)
vue的声明周期非常重要,大部分vue面试的时候都会被问到,学习vue声明周期也会让你对vue有更深层次的理解,我们先以vue2的生命周期图示为例
vue3 与 vue2 声明周期对比:
测试vue3 生命周期函数:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<input type="text" v-model="name">
<a href="双向绑定.html">1111111111111111111</a>
</div>
</body>
</html>
<script type="text/javascript" src="js/vue.global.prod.js"></script>
<script type="text/javascript">
const {createApp,
reactive,
toRefs,
onBeforeMount,
onMounted,
onBeforeUpdate,
onUpdated,
onBeforeUnmount,
onUnmounted} = Vue
const app = createApp({
setup(){
console.log("========setup========")
const data = reactive({
name:'zhangsan'
})
onBeforeMount(() => {
console.log("========onBeforeMount========")
})
onMounted(() => {
console.log("========onMounted========")
}),
onBeforeUpdate(() => {
console.log("========onBeforeUpdate========")
}),
onUpdated(() => {
console.log("========onUpdated========")
}),
onBeforeUnmount(() => {
console.log("========onBeforeUnmount========")
}),
onUnmounted(() => {
console.log("========onUnmount========")
})
return {...toRefs(data)}
},
}).mount('#app')
</script>