Vue3中的Hooks 其实就是业务逻辑的抽离,跟Vue2mixin 本质上是一样的:将当前组件的业务逻辑抽离到一个公共的文件中,提高逻辑复用性,让当前组件看起来更加清爽,不太一样的地方是我们封装hooks 的时候一般是返回一个函数。

先来看一个简单的例子:todoList demo。

新建一个Vue3+Ts的项目: npm init vite@latest 项目名称:vue3-hooks, 使用TS,然后cd vue3-hooks -> npm install -> npm run dev 然后删除不必要的内容,新建一个type 文件夹存放所有的类型,新建一个TodoList.vue编写我们的业务和视图代码: 现在的目录结构如下:

TodoList.vue代码如下:

 <template><h1>To do List</h1>添加一条记录: <input type="text" v-model="data.toAddData.title" /><button @click="onAdd">添加</button><br /><br /><table><thead><tr><td>id</td><td>名称</td><td>是否完成</td></tr></thead><tbody><tr v-for="item in data.list" :key="item.id"><td>{{ item.id }}</td><td>{{ item.title }}</td><td>{{ item.isFinished }}</td></tr></tbody></table>
</template><script setup lang="ts"> import { reactive } from "vue";
import { IntTodoList } from "../type/todoList";type DataType = {list: IntTodoList[];toAddData: IntTodoList;
};
const data = reactive<DataType>({list: [],toAddData: {id: 0,title: "",isFinished: false,},
});
const onAdd = () => {data.list.push({ ...data.toAddData, id: data.list.length + 1 });
}; </script>

定义的类型文件:

interface IntTodoList {id: number;title: string;isFinished: boolean;
}export type { IntTodoList };

接来下开始进行逻辑的抽离:

1.新建一个hooks 文件夹,在hooks 文件夹中新建一个todoList.ts 文件,将TodoList.vue 中的data 数据 和onAdd 方法 抽离到hooks文件中,并导出:

import { reactive } from "vue";
import { IntTodoList } from "../../type/todoList";export default () => {type DataType = {list: IntTodoList[];toAddData: IntTodoList;};const data = reactive<DataType>({list: [],toAddData: {id: 0,title: "",isFinished: false,},});const onAdd = () => {data.list.push({ ...data.toAddData, id: data.list.length + 1 });};return { data, onAdd}
};

2.在TodoList.vue 中导入:

<template><h1>To do List</h1>添加一条记录: <input type="text" v-model="data.toAddData.title" /><button @click="onAdd">添加</button><br /><br /><table><thead><tr><td>id</td><td>名称</td><td>是否完成</td></tr></thead><tbody><tr v-for="item in data.list" :key="item.id"><td>{{ item.id }}</td><td>{{ item.title }}</td><td>{{ item.isFinished }}</td></tr></tbody></table>
</template><script setup lang="ts"> import TodoListHooks from './hooks/todoList'const {data, onAdd} = TodoListHooks() </script>

如果其他组件需要data 数据 和 onAdd 方法,也可以导入hooks 文件使用,而且现在再来看TodoList.vue 文件看上去是不是非常清爽。 功能跟未抽离前是一样的:

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

Vue3 Hooks 模块化抽离相关推荐

  1. vue3 hooks碰到的问题

    根据项目的需求,需要将获取报表id的方法写成一个hooks,在hooks是否使用监听watch,碰到了一系列的问题.在写hooks的时候,在hooks里面写了监听watch,写了一个响应式的数据,但是 ...

  2. Vue3 props组件抽离

    引言 假设你已经了解了Vue3的setup函数,不了解的话可以先看看这篇文章. 拥抱Vue3 (二) setup函数_flow_camphor的博客-CSDN博客 在setup函数中我们知道它有两个参 ...

  3. vue mixins(vue3 hooks)动态获取div高度

    之前转载过一篇文章: https://blog.csdn.net/qq_37167049/article/details/103084927 可以动态计算div 高度,但是比较繁琐的痛点是: 需要在每 ...

  4. 详解从零搭建企业级 vue3 + vite2+ ts4 框架全过程

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 本文不仅仅是搭建个脚手架这么简单,还会带你了解每一步.甚至每一个配置项的作用,和每个配置的知 ...

  5. GoView 开源,一个好用的 Vue3 低代码开发数据大屏系统

    介绍 GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可制作数据大屏,减少心智负担.当然低代码也不是 "银弹",希望所有技术 ...

  6. Vue3能用到生产环境了吗?

    最近,有不少朋友问我:"十三,看你写了几个Vue3的项目,你觉得Vue3能用到生产环境了吗?"结合自己的想法和尤大直播说的话,给一点建议. 别问我!没结果,除非花手摇过我. 我不是 ...

  7. vue3状态管理工具 pinia的使用

    vue3状态管理工具 pinia的使用 pinia 是一个轻量级的状态管理库,属于 vue3 生态圈新的成员之一,也可以把它看做 vuex5,同时支持 vue2 和 vue3,模块化的设计让它的结构十 ...

  8. iOS 模块化进阶整理记录

    先说模块化可能给项目带来的改变: 代码提交更规范,分工更为明确,质量提高 编译加快 在原模式中,需要 150s 左右整个编译完毕,然后开发人员才可以开始调试.而现在组件化之后,某个业务组件只需要 10 ...

  9. 分享一个强大的数据可视化低代码开发平台

    点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 整体介绍 框架:基于 Vue3 框架编写,使用 hooks 写法抽离部分逻辑,使 ...

  10. 服务端渲染(SSR) 通用技术解决方案

    项目背景 服务端渲染(SSR) 通用技术解决方案的诞生来源于对 360搜索百科移动端项目的一次重构实践.而当时决定重构该项目的主要原因有以下几点: 1.  技术栈陈旧,熟悉.开发以及维护成本都较高 项 ...

最新文章

  1. Python中的一些“小坑”
  2. linux变量赋值用中括号,Shell脚本定义变量和重新赋值
  3. linux中/bin和/sbin和/usr/bin和/usr/sbin
  4. 6、Qt Meta Object system 学习
  5. P3321-Apple Tree【树状数组】
  6. 价值358的emlog定制模板lu1.3
  7. 济南清北学堂游记 Day 6.
  8. 用VBA实现OUTLOOK接收新邮件后的自动转发
  9. 数据分类算法-朴素贝叶斯
  10. 相片打印机原理_照片打印机 技术原理介绍_照片打印机_办公打印评测试用-中关村在线...
  11. 第九周 练习判断闰年和平年
  12. 打印机一页内容总是有空白
  13. CUDA:实现Sobel边缘检测滤波器的实例
  14. 学习笔记 | 二八定律、ABC分析法
  15. 基于jsp+mysql+ssm酒店管理系统-计算机毕业设计
  16. SENet代码复现+超详细注释(PyTorch)
  17. 数值最优化-KKT条件(一阶必要条件)证明总结
  18. RuntimeError: cuda runtime error (8) : invalid device function at /pytorch/torch/lib/THC/generic/THC
  19. 计算机网络实验八——聊天程序
  20. 基于C++实现的股票大数据的统计分析与可视化

热门文章

  1. 金融rate函数解析【附java实现】
  2. 八种排序java实现
  3. 360度领导能力全方位测试
  4. jieba关键词抽取(TF-IDF)与中文抽取式摘要
  5. Spring中AOP的Introductions使用介绍
  6. 高并发编程之ThreadPool 线程池
  7. Java教学视频全集,活见久
  8. 游园惊梦--记游第九届软博会
  9. 3ds max基础知识
  10. iOS_6_ToolBar+xib+红楼梦