1、Vue3的生命周期
创建=》挂载前=》挂载完毕=》更新前=》更新完毕=》卸载前=》卸载完毕
Vue2和Vue3生命周期对比
父组件与子组件的生命周期关系
父组件会先于子组件创建,等子组件挂载完毕,父组件才挂载完毕,子组件的更新不会引起父组件的更新,但是子组件的卸载和重新创建会引起父组件的更新
2.自定义Hooks
Hooks(组合式函数) 的核心优势之一就是 将相关的数据、方法、逻辑整合在一起,使代码更加模块化、可维护和可复用。
在src下新建一个hooks文件夹,
hooks的文件命名规则为 useXxx,
<template>
<div>
<h2>当前求和为:{{ sum }} 放大10倍后:{{bigSum }}</h2>
<button @click="changeSum">求和加1</button>
<br>
<img v-for="(item,index) in dogList" :key="index" :src="item" alt="">
<br>
<button @click="addDog">点我再来一只小狗</button>
</div>
</template>
<script lang="ts">
export default {
name:'Person234'
}
</script>
<script lang="ts" setup >
import useDog from '../hooks/useDog';
import useSum from '../hooks/useSum';
const {sum,changeSum,bigSum} =useSum()
const {dogList,addDog} = useDog()
</script>
<style scope>
img{
height: 100px;
margin:10px;
}
</style>
useDog.ts:
import {ref,reactive} from 'vue'
import axios from 'axios';
export default function(){
//数据
const dogList = reactive([
"https://images.dog.ceo/breeds/pembroke/n02113023_5310.jpg"
])
//方法
const addDog = async ()=>{
try {
let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')
dogList.push(result.data.message)
} catch (error) {
alert('请求错误')
}
}
return {dogList,addDog}
}
useSum.ts:
import {ref,reactive,computed} from 'vue'
export default function(){
//数据
const sum = ref(0)
const bigSum = computed(()=>{
return sum.value*10
})
//方法
const changeSum = ()=>{
sum.value += 1
}
//将数据、方法等送出去
return {sum,changeSum,bigSum}
}