当前位置: 首页 > news >正文

vue3【详解】组合式函数

什么是组合式函数?

利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数,用于实现逻辑复用,类似 react18 中的 hook

  • 函数名称 – 以 use 开头,采用驼峰命名,如 useTitle
  • 参数 – 建议使用 toValue() 处理(以便支持 ref、getter 或普通值的参数)
  • 返回值 – 建议使用一个包含多个 ref 的普通的非响应式对象(以便解构为 ref 之后仍可以保持响应性)

相关的工具库 VueUse

组合式函数 vs 公共函数 的区别

  • 公共函数封装无状态的逻辑:传入参数后立刻返回期望的返回值,如日期格式化函数,将指定日期对象格式化为 2024年7月20日23:12:53
  • 组合式函数封装有状态逻辑,可管理会随时间而变化的状态,如将鼠标的坐标声明为响应式变量,要想在移动鼠标过程中,实时更新鼠标坐标的响应式变量并触发页面渲染,则需要使用组合式函数。

响应式的组合式函数

需求:随传入的 URL 变化,访问接口数据
要点:通过侦听器跟踪 URL 的变化

// fetch.js
import { ref, watchEffect, toValue } from 'vue'export function useFetch(url) {const data = ref(null)const error = ref(null)const fetchData = () => {// reset state before fetching..data.value = nullerror.value = nullfetch(toValue(url)).then((res) => res.json()).then((json) => (data.value = json)).catch((err) => (error.value = err))}watchEffect(() => {fetchData()})return { data, error }
}

实战范例

  • useEventListener

    封装添加和清除 DOM 事件监听器的逻辑

    import { onMounted, onUnmounted } from 'vue'export function useEventListener(target, event, callback) {onMounted(() => target.addEventListener(event, callback))onUnmounted(() => target.removeEventListener(event, callback))
    }
    

    使用范例

      useEventListener(window, 'mousemove', (event) => {x.value = event.pageXy.value = event.pageY})
    
  • useTitle
    https://sunshinehu.blog.csdn.net/article/details/139838689

  • useLocation
    https://sunshinehu.blog.csdn.net/article/details/139486731

  • useMousePosition
    https://blog.csdn.net/weixin_41192489/article/details/137875217

http://www.lryc.cn/news/405572.html

相关文章:

  • 微服务实战系列之玩转Docker(六)
  • Python题解Leetcode Hot100之动态规划
  • 你了解GD32 MCU上下电要求吗
  • 二、【Python】入门 - 【PyCharm】安装教程
  • 2、程序设计语言基础知识
  • ARM/Linux嵌入式面经(十八):TP-Link联洲
  • 解读vue3源码-响应式篇2
  • 【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS
  • centos7安装es及简单使用
  • 2024年自动驾驶SLAM面试题及答案(更新中)
  • HTML零基础自学笔记(上)-7.18
  • 数学建模--图论与最短路径
  • FLINK-checkpoint失败原因及处理方式
  • Hbase映射为Hive外表
  • 洛谷P1002(过河卒)题解
  • 微信小程序 async-validator 表单验证 第三方包
  • 马克·扎克伯格解释为何开源AI对开发者有利
  • 游戏外挂的技术实现与五年脚本开发经验分享
  • 认识神经网络【多层感知器数学原理】
  • MySQL入门学习-SQL高级技巧.CTE和递归查询
  • 键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???
  • Spring Boot 接口访问频率限制的实现详解
  • 前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker
  • 中文分词库 jieba 详细使用方法与案例演示
  • EXO-helper解释
  • Qt开发网络嗅探器01
  • mysql面试(三)
  • 阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版
  • 捷配生产笔记-一文搞懂阻焊层基本知识
  • html 常用css样式及排布问题