Vue3 —— 常用 Composition API(二)(hook 函数、toRef 和 toRefs)

简介: Vue3 —— 常用 Composition API(二)(hook 函数、toRef 和 toRefs)

一、自定义 hook 函数

什么是 hook?

  1. hook 的本质是一个函数,把 setup 函数中使用的 Composition API 进行了封装。
  2. 类似于 vue2.x 中的 mixin。
  3. 自定义 hook 的优势:复用代码,让 setup 中逻辑更清楚易懂。

实例

  1. 在 src 下创建 hooks 文件夹
  2. 在 hooks 文件夹中创建 usexxx.js 文件 (一般都以 use- 开头)
  3. 4403aa6361544954b07f0312f42b6f10.png
  4. 在 usexxx.js 中进行函数封装,并暴露出来
  1. 记得在函数最后返回要用到的属性
  2. 最后在组件中导入它就可以使用了

./hook/usePoint.js:定义鼠标打点的相关内容

  import { reactive, onMounted, onBeforeUnmount } from "vue";
  export default function savePoint() {
    // 实现鼠标打点相关的数据
    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:导入 hooks 文件夹里面的 js 文件,直接使用

  <template>
    <div>
      <h3>当前点击时鼠标的坐标为:x:{{point.x}},  y:{{point.y}}</h3>
    </div>
  </template>
  <script>
  import usePoint from '../hooks/usePoint'
  export default {
    name: "Demo",
    setup() {
      // 数据
      let point = usePoint()
      // 返回一个对象
      return {  point };
    },
  };
  </script>

初始点:

913fac622bcd40e09d49b4397cf5e16a.png

找到了个浪漫点:

09d63c71c11948259ff1d3ec2a22b6b1.png

二、toRef 和 toRefs

toRef

  1. 作用:创建一个 ref 对象,其 value 值指向另一个对象中的某个属性
  // 语法
  const name = toRef(person, 'name')
  1. 应用:要将响应式对象中的某个属性单独提供给外部使用时
  2. 实例:
  1. 在返回的对象中,每个属性都用 toRef() 响应式接收
  2. 在模板字符串里面直接写属性名,就不用使用 . 获取了
  <template>
    <div>
      <h3>姓名:{{name}}</h3>
      <h3>年龄:{{age}}</h3>
      <h3>薪资:{{salary}}K</h3>
      <button @click="name+='~'">修改姓名</button>
      <button @click="age++">增长年龄</button>
      <button @click="salary++">增加薪资</button>
    </div>
  </template>
  <script>
  import { reactive, toRef } from "vue";
  export default {
    name: "Demo",
    setup() {
      // 数据
      let person = reactive({
        name: '张三',
        age: 18,
        job: {
          j1:{
            salary: 20
          }
        }
      })
      // 返回一个对象
      return {
        name: toRef(person, 'name'),
        age: toRef(person, 'age'),
        salary: toRef(person.job.j1, 'salary')
      };
    },
  };
  </script>

分别点击各个按钮数次后(响应式更新):

c5663766b1ad41db9d7771428cc836b0.png

toRefs

作用:toRefs 与 toRef 功能一致,但可以批量创建多个 ref 对象,语法 toRefs(person)

实例:

toRefs 是一个对象,对象里面不能直接写对象,所有使用 ... 展开运算符

只对 person 的一级键值对有效,更深层次的还是需要通过 . 手动获取

  <template>
    <div>
      <h3>姓名:{{name}}</h3>
      <h3>年龄:{{age}}</h3>
      <h3>薪资:{{job.j1.salary}}K</h3>
      <button @click="name+='~'">修改姓名</button>
      <button @click="age++">增长年龄</button>
      <button @click="job.j1.salary++">增加薪资</button>
    </div>
  </template>
  <script>
  import { reactive, toRefs } from "vue";
  export default {
    name: "Demo",
    setup() {
      // 数据
      let person = reactive({
        name: '张三',
        age: 18,
        job: {
          j1:{
            salary: 20
          }
        }
      })
      // 返回一个对象
      return {
        ...toRefs(person)
      };
    },
  };
  </script>

分别点击各个按钮数次后(响应式更新):

de50fedb3ec3431b96a3471c71af710a.png

不积跬步无以至千里 不积小流无以成江海

目录
打赏
0
0
0
0
10
分享
相关文章
深入理解 Vue 3 的 Composition API 与新特性
本文详细探讨了 Vue 3 中的 Composition API,包括 setup 函数的使用、响应式数据管理(ref、reactive、toRefs 和 toRef)、侦听器(watch 和 watchEffect)以及计算属性(computed)。我们还介绍了自定义 Hooks 的创建与使用,分析了 Vue 2 与 Vue 3 在响应式系统上的重要区别,并概述了组件生命周期钩子、Fragments、Teleport 和 Suspense 等新特性。通过这些内容,读者将能更深入地理解 Vue 3 的设计理念及其在构建现代前端应用中的优势。
94 1
深入理解 Vue 3 的 Composition API 与新特性
Vue 3新特性详解:Composition API的威力
【10月更文挑战第25天】Vue 3 引入的 Composition API 是一组用于组织和复用组件逻辑的新 API。相比 Options API,它提供了更灵活的结构,便于逻辑复用和代码组织,特别适合复杂组件。本文将探讨 Composition API 的优势,并通过示例代码展示其基本用法,帮助开发者更好地理解和应用这一强大工具。
73 2
|
4月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
5月前
|
vue3知识点:ref函数
vue3知识点:ref函数
70 2
|
5月前
|
vue3知识点:自定义hook函数
vue3知识点:自定义hook函数
48 2
|
5月前
|
API
vue3知识点:reactive函数
vue3知识点:reactive函数
60 1
|
5月前
|
vue 组件中的 data 为什么是一个函数 ?
【10月更文挑战第8天】 在 Vue 组件中,`data` 被定义为一个函数而非普通对象,以确保每个组件实例拥有独立的数据空间,避免数据混乱。这种方式还支持数据的响应式更新、组件的继承与扩展,并有助于避免潜在问题,提升应用的可靠性和性能。
43 2
Vue Render函数
【10月更文挑战第11天】 Vue 的 Render 函数提供了一种强大而灵活的方法来创建虚拟 DOM 节点,使开发者能够更精细地控制组件的构建过程。通过 `createElement` 参数,可以动态生成各种元素和组件,实现复杂逻辑和高级定制。尽管使用 Render 函数需要更多代码和对虚拟 DOM 的深入理解,但它在处理复杂场景时展现出巨大的优势。
49 2
Vue 3的全新Reactivity API:解锁响应式编程的力量
Vue 3引入了基于Proxy的全新响应式系统,提升了性能并带来了更强大的API。本文通过示例详细介绍了`reactive`、`ref`、`computed`、`watch`等核心API的使用方法,帮助开发者深入理解Vue 3的响应式编程。无论你是初学者还是资深开发者,都能从中受益,构建更高效的应用程序。
73 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等