个人博客 个人博客
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

董先亮

前端react开发
首页
  • 前端
  • 后端
  • Git
  • Docker
  • 网络
  • 操作系统
工具
阅读
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Vue

    • 响应式API
    • vite环境变量
    • 侦听
    • 样式
    • 多环境配置
    • 实现页面缓存
    • 组件封装
    • nextTick
    • 组件传值
    • 批量导入
    • 插槽
    • scoped与deep原理
    • v-model
    • vue-router
    • 项目全局
    • 自定义hook
      • 总结
  • React

  • 前端框架
  • Vue
NeverStop1024
2023-07-09
目录

自定义hook

  自定义hooks本质上是一个函数,通常结合Composition API使用。抽离setup函数中可复用逻辑,按需引入和调用来降低代码耦合度。具体做法:

  1. 将可复用的代码逻辑抽离成外部ts文件;
  2. 函数名/文件名以use开头,比如useDialog;
  3. setup函数中解构出响应式变量和方法,比如const { visible } = useDialog(false);
// src/hooks/useMousePosition.ts
import { ref, onMounted, onUnmounted, Ref } from 'vue'

interface MousePosition {
    x: Ref<number>,
    y: Ref<number>
}

function useMousePosition(): MousePosition {
    const x = ref(0)
    const y = ref(0)
    const updateMouse = (e: MouseEvent) => {
        x.value = e.pageX
        y.value = e.pageY
    }
    onMounted(() => {
        document.addEventListener('click', updateMouse)
    })
    onUnmounted(() => {
        document.removeEventListener('click', updateMouse)
    })
    return { x, y }
}

export default useMousePosition
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// src/views/test.vue
<template>
  <div>
    <p>X: {{ x }}</p>
    <p>Y: {{ y }}</p>
  </div>
</template>

<script lang="ts" setup>
	import { defineComponent } from 'vue'
	// 引入hooks
	import useMousePosition from '../../hooks/useMousePosition'
	// 采用解构的方法
	const { x, y } = useMousePosition()
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 总结

Vue2时代Option Api ,data、methos、watch…分开写,这种是碎片化的分散的,代码一多就容易高耦合,维护时来回切换代码是繁琐的! Vue3时代出现Composition Api,通过利用各种Hooks和自定义Hooks将碎片化的响应式变量和方法按功能分块写,实现高内聚低耦合。

编辑 (opens new window)
上次更新: 2023/07/09
项目全局
三方库

← 项目全局 三方库→

最近更新
01
mock使用
07-12
02
websocket即时通讯
07-12
03
前端面试题
07-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 NeverStop1024 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式