一、生命周期
Vue2.x生命周期相关:Vue知识点整理(一)- Vue核心(6)- 生命周期(重要)
官方Vue3生命周期图示
Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
简单案例练习
效果展示
相关代码:
Demo.vue
<template> <h2>当前求和为:{{ sum }}</h2> <button @click="sum++">点击+1</button> </template> <script> import { ref } from "vue"; export default { name: "Demo", setup() { console.log("-----setup-----"); // 数据 let sum = ref(0); return { sum, }; }, beforeCreate() { console.log("-----beforeCreate-----"); }, created() { console.log("-----created-----"); }, beforeMount() { console.log("-----beforeMount-----"); }, mounted() { console.log("-----mounted-----"); }, beforeUpdate() { console.log("-----beforeUpdate-----"); }, updated() { console.log("-----updated-----"); }, beforeUnmount() { console.log("-----beforeUnmount-----"); }, unmounted() { console.log("-----unmounted-----"); }, }; </script> <style></style>
App.vue
<template> <button @click="isShowDemo = !isShowDemo">控制Demo组件显示/隐藏</button> <Demo v-if="isShowDemo"></Demo> </template> <script> import Demo from "./components/Demo.vue"; import { ref } from "vue"; export default { name: "App", components: { Demo }, setup() { let isShowDemo = ref(true); return { isShowDemo }; }, }; </script>
Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
选项式 API | Hook insidesetup |
---|---|
beforeCreate | Not needed* |
created | Not needed* |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeUnmount | onBeforeUnmount |
unmounted | onUnmounted |
errorCaptured | onErrorCaptured |
renderTracked | onRenderTracked |
renderTriggered | onRenderTriggered |
activated | onActivated |
deactivated | onDeactivated |
TIP:
简单案例练习
效果展示
仅需修改Demo.vue中相关代码即可
<script> import { ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted, } from "vue"; export default { name: "Demo", setup() { console.log("-----setup-----"); // 数据 let sum = ref(0); onBeforeMount(() => { console.log("-----onBeforeMount-----"); }); onMounted(() => { console.log("-----onMounted-----"); }); onBeforeUpdate(() => { console.log("-----onBeforeUpdate-----"); }); onUpdated(() => { console.log("-----onUpdated-----"); }); onBeforeUnmount(() => { console.log("-----onBeforeUnmount-----"); }); onUnmounted(() => { console.log("-----onUnmounted-----"); }); return { sum }; }, }; </script>
简单案例练习
usePoint.js
import { reactive, onMounted, onBeforeUnmount } from "vue"; export default function () { // 实现鼠标"打点"相关的数据 let point = reactive({ x: 0, y: 0, }); // 实现鼠标"打点"相关的方法 function savePoint(event) { point.x = event.pageX; point.y = event.pageY; console.log(event.pageX, event.pageY); } // 实现鼠标"打点"相关的生命周期钩子 onMounted(() => { window.addEventListener("click", savePoint); }); onBeforeUnmount(() => { window.removeEventListener("click", savePoint); }); return point; }
Demo.vue
<template> <h2>当前求和为:{{ sum }}</h2> <button @click="sum++">点击+1</button> <hr /> <h2>当前点击时鼠标的坐标为:x:{{ point.x }}, y:{{ point.y }}</h2> </template> <script> import { ref } from "vue"; import usePoint from "../hooks/usePoint"; export default { name: "Demo", setup() { // 数据 let sum = ref(0); let point = usePoint(); return { sum, point }; }, }; </script>
创建一个ref对象,其value值指向另一个对象中的某个属性
const fooRef = toRef(state, 'foo')
要将响应式对象中的某个属性单独提供给外部使用时
toRefs 与 toRef 功能一致,但可以批量创建多个ref对象,例如
const stateAsRefs = toRefs(state)
<template> <h2>姓名:{{ name }}</h2> <h2>年龄:{{ age }}</h2> <h2>零用钱:{{ money }}</h2> <button @click="name += '!'">姓名添加上!</button> <button @click="age++">年龄增长</button> <button @click="money++">零花钱增加</button> </template> <script> import { reactive, toRef } from "vue"; export default { name: "App", setup() { let person = reactive({ name: "周星星", age: 25, item: { wallet: { money: 100, }, }, }); return { // 使用toRef name: toRef(person, "name"), age: toRef(person, "age"), money: toRef(person.item.wallet, "money"), }; }, }; </script>
<template> <h2>姓名:{{ name }}</h2> <h2>年龄:{{ age }}</h2> <h2>零用钱:{{ item.wallet.money }}</h2> <button @click="name += '!'">姓名添加上!</button> <button @click="age++">年龄增长</button> <button @click="item.wallet.money++">零花钱增加</button> </template> <script> import { reactive, toRef, toRefs } from "vue"; export default { name: "App", setup() { let person = reactive({ name: "周星星", age: 25, item: { wallet: { money: 100, }, }, }); return { // 使用toRef // name: toRef(person, "name"), // age: toRef(person, "age"), // money: toRef(person.item.wallet, "money"), // 使用toRefs ...toRefs(person), }; }, }; </script> <style></style>
上一个:python读取文件夹的文件名
下一个:如何查看项目的vue版本方法