Vue3 Composition API(三)——生命周期钩子、Provide函数 和 Inject函数、封装Hook案例、setup顶层编写方式

一、生命周期钩子

我们前面说过 setup 可以用来替代 data 、 methods 、 computed 、watch 等等这些选项,也可以替代
生命周期钩子。

那么setup中如何使用生命周期函数呢?

  • 可以使用直接导入的 onX 函数注册生命周期钩子;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、Provide函数 和 Inject函数

事实上我们之前还学习过Provide和Inject,Composition API也可以替代之前的 Provide 和 Inject 的选项

我们可以通过 provide来提供数据:
可以通过 provide 方法来定义每个 Property;

provide可以传入两个参数:

  • name:提供的属性名称;
  • value:提供的属性值;
    在这里插入图片描述

在 后代组件 中可以通过 inject 来注入需要的属性和对应的值:
可以通过 inject 来注入需要的内容;

inject可以传入两个参数:

  • 要 inject 的 property 的 name;
  • 默认值;
    在这里插入图片描述

在这里插入图片描述

三、数据的响应式

为了增加 provide 值和 inject 值之间的响应性,我们可以在 provide 值时使用 ref 和 reactive。
在这里插入图片描述

四、修改响应式Property

如果我们需要修改可响应的数据,那么最好是在数据提供的位置来修改:

  • 我们可以将修改方法进行共享,在后代组件中进行调用;
    在这里插入图片描述

五、封装Hook函数案例

  1. 计数器案例的Hook
    在这里插入图片描述

  2. 修改title的Hook
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 监听界面滚动位置的Hook
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 使用 localStorage 存储和获取数据的Hook
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

<template>
  <div>
    <h2>当前计数:{{counter}}</h2>
    <button @click="increment">+1</button>
    <button @click="decrement">-1</button>
    <h1>{{data}}</h1>
    <button @click="changeData">修改data</button>
    <p class="content"></p>
    <div class="scroll">
      <div class="scroll-x">scrollX: {{scrollX}}</div>
      <div class="scroll-y">scrollY: {{scrollY}}</div>
    </div>
  </div>
</template>
<script>
import useTitle from "./hook/useTitle";
import useCounter from "./hook/useCounter";
import useScrollPosition from "./hook/useScrollPosition";
import useLocalStorage from "./hook/useLocalStorage";
export default {
  name: "Home",
  setup(props, context) {
    // 1. 计数器
    const {counter,  increment, decrement} = useCounter()

    // 2. 修改title
    const titleRef = useTitle('我是默认的title')
    setTimeout(() => {
      titleRef.value = 'hahaha'
    }, 4000)

    // 3. 获取滚动位置
    const {scrollX, scrollY} = useScrollPosition()

    // 4.保存数据
    const data = useLocalStorage('user', {name: 'zep', age: 22})
    const changeData = () => {
      data.value = {name: 'haha', age: 18}
    }
    return {
      counter, increment, decrement,
      scrollX, scrollY,
      data, changeData
    }
  }
}
</script>

<style scoped>
  .content {
    width: 3000px;
    height: 5000px;
  }
  .scroll {
    position: fixed;
    right: 30px;
    bottom: 30px;
  }
</style>

六、补充:setup顶层编写方式(实验性特性,不稳定)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 2和Vue 3都有一些常用的生命周期钩子函数,但在Vue 3中有一些变化。以下是Vue 2和Vue 3中常用的生命周期钩子函数Vue 2中的生命周期钩子函数: 1. beforeCreate: 实例创建之前调用,此时数据观测(data observer)和事件配置(event/watcher)尚未初始化。 2. created: 实例创建完成后调用,此时已经完成了数据观测(data observer)和事件配置(event/watcher)。 3. beforeMount: 在挂载之前调用,在这个时候模板已经编译完成,但是还未挂载到页面中。 4. mounted: 在挂载完成后调用,此时组件已经被挂载到页面中,可以访问到DOM元素。 5. beforeUpdate: 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。 6. updated: 在数据更新之后调用,发生在虚拟DOM重新渲染和打补丁之后。 7. beforeDestroy: 在实例销毁之前调用,此时实例仍然完全可用。 8. destroyed: 在实例销毁之后调用,此时实例已经被销毁,所有的事件监听器和子实例都被删除。 Vue 3中的生命周期钩子函数: 1. beforeCreate: 与Vue 2相同,在实例创建之前调用。 2. created: 与Vue 2相同,在实例创建完成后调用。 3. beforeMount: 与Vue 2相同,在挂载之前调用。 4. mounted: 与Vue 2相同,在挂载完成后调用。 5. beforeUpdate: 与Vue 2相同,在数据更新之前调用。 6. updated: 与Vue 2相同,在数据更新之后调用。 7. beforeUnmount: 在组件卸载之前调用,此时组件仍然完全可用。 8. unmounted: 在组件卸载之后调用,此时组件已经被卸载,所有的事件监听器和子组件都被删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值