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

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

相关文章
|
6天前
|
JavaScript 前端开发 API
组合API:掌握Vue的组合式API(Composition API)
【4月更文挑战第24天】Vue.js的组合式API是Vue 3中的新特性,旨在提供更灵活的组件逻辑组织方式。它允许开发者像React Hooks一样定义和复用逻辑单元——组合函数。通过组合函数,可以跨组件共享和管理状态,提升代码复用和维护性。本文介绍了如何开始使用组合式API,包括安装Vue CLI、引入API、使用组合函数以及组织和复用逻辑。掌握组合式API能增强开发复杂应用的能力,改善代码结构和可读性。
|
7天前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。
|
14天前
|
JavaScript API
Vue3 API函数及功能
Vue3 API函数及功能
7 0
|
19天前
|
JavaScript 前端开发 API
Vue3 组合式 API
Vue3 组合式 API
|
19天前
|
JavaScript API
Vue 组合式 API
Vue 组合式 API
|
21天前
|
JavaScript API UED
Vue3.0新特性解析与实战:Composition API、Teleport与Suspense
【4月更文挑战第6天】Vue3.0引入了颠覆性的Composition API,通过函数式方法提升代码可读性和复用性,例如`setup()`、`ref`等,便于逻辑模块化。实战中,自定义的`useUser`函数可在多个组件中共享用户信息逻辑。另外,Teleport允许组件渲染到DOM特定位置,解决模态框等场景的上下文问题。再者,Suspense提供异步组件加载的延迟渲染,使用fallback内容改善用户体验。这些新特性显著优化了开发和性能,适应现代Web需求。
21 0
|
28天前
|
JavaScript API
Composition Api 与 Options Api 有什么区别?
Composition Api 与 Options Api 有什么区别?
13 0
|
1天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
7 1
|
1天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
2天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里函数计算中开启函数计算 API 接口如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
99 6