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

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

相关文章
|
1月前
|
JavaScript 前端开发 API
Vue 3新特性详解:Composition API的威力
【10月更文挑战第25天】Vue 3 引入的 Composition API 是一组用于组织和复用组件逻辑的新 API。相比 Options API,它提供了更灵活的结构,便于逻辑复用和代码组织,特别适合复杂组件。本文将探讨 Composition API 的优势,并通过示例代码展示其基本用法,帮助开发者更好地理解和应用这一强大工具。
33 2
|
1月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
17天前
|
JavaScript 前端开发 API
Vue.js 3中的Composition API:提升你的组件开发体验
Vue.js 3中的Composition API:提升你的组件开发体验
|
2月前
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
36 2
|
2月前
|
JavaScript API
vue3知识点:自定义hook函数
vue3知识点:自定义hook函数
28 2
|
2月前
|
API
vue3知识点:reactive函数
vue3知识点:reactive函数
30 1
|
2月前
|
API
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
27 0
|
2月前
|
JavaScript 前端开发 API
《vue3第六章》其他,包含:全局API的转移、其他改变
《vue3第六章》其他,包含:全局API的转移、其他改变
23 0
|
17天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
19天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。