047Vue3组合式函数代替Mixin

组合式函数示例

// mouse.js
import { ref, onMounted, onUnmounted } from 'vue'// 按照惯例,组合式函数名以“use”开头
export function useMouse() {// 被组合式函数封装和管理的状态const x = ref(0)const y = ref(0)// 组合式函数可以随时更改其状态。function update(event) {x.value = event.pageXy.value = event.pageY}// 一个组合式函数也可以挂靠在所属组件的生命周期上// 来启动和卸载副作用onMounted(() => window.addEventListener('mousemove', update))onUnmounted(() => window.removeEventListener('mousemove', update))// 通过返回值暴露所管理的状态return { x, y }
}

组合式函数示例(进一步拆分)

// event.js
import { onMounted, onUnmounted } from 'vue'export function useEventListener(target, event, callback) {// 如果你想的话,// 也可以用字符串形式的 CSS 选择器来寻找目标 DOM 元素onMounted(() => target.addEventListener(event, callback))onUnmounted(() => target.removeEventListener(event, callback))
}
// mouse.js
import { ref } from 'vue'
import { useEventListener } from './event'export function useMouse() {const x = ref(0)const y = ref(0)useEventListener(window, 'mousemove', (event) => {x.value = event.pageXy.value = event.pageY})return { x, y }
}

组合函数的调用

<script setup>
import { useMouse } from './mouse.js'const { x, y } = useMouse()
</script><template>Mouse position is at: {{ x }}, {{ y }}</template>

含参数的组合函数

// fetch.js
import { ref, isRef, unref, watchEffect } from 'vue'export function useFetch(url) {const data = ref(null)const error = ref(null)function doFetch() {// 在请求之前重设状态...data.value = nullerror.value = null// unref() 解包可能为 ref 的值fetch(unref(url)).then((res) => res.json()).then((json) => (data.value = json)).catch((err) => (error.value = err))}if (isRef(url)) {// 若输入的 URL 是一个 ref,那么启动一个响应式的请求watchEffect(doFetch)} else {// 否则只请求一次// 避免监听器的额外开销doFetch()}return { data, error }
}

调用办法

import { useFetch } from './fetch.js'const { data, error } = useFetch('...')

组合函数的最佳实践

  • 组合式函数约定用驼峰命名法命名,并以“use”作为开头
  • 输入参数的unref(),去掉不必要的响应
  • 组合式函数中返回值使用 ref() 而不是 reactive()

047Vue3组合式函数代替Mixin相关推荐

  1. Vue3的组合式函数

    简言 今天来学习下vue3组合式函数用法,先甩官方链接:组合式函数. vue2的时候,以一个vue文件是按照vue给的模块文件来写的,也就是选项式API写法(一个文件里有template.script ...

  2. 【vue3】组合式函数

    vue3组合式函数 为什么引入?实现更好的状态复用(mixin) vue组合式函数 VS react的hook 跟着官网学习 组合式API 异步的数据请求例子 组合式 使用限制 本文主要参考vue.j ...

  3. Vue——组合式函数

    目录 什么是"组合式函数"?​ 鼠标跟踪器示例​ 异步状态示例​ 约定和最佳实践​ 命名​ 输入参数​ 返回值​ 副作用​ 使用限制​ 通过抽取组合式函数改善代码结构 选项式 AP ...

  4. Vue3组合式函数最佳实践(一)

    截至目前,组合式函数应该是在VUE 3应用程序中组织业务逻辑最佳的方法. 它让我们可以把一些小块的通用逻辑进行抽离.复用,使我们的代码更易于编写.阅读和维护. 由于这种编写VUE代码的方式相对较新,因 ...

  5. 作为函数的mixin

    在一个 mixin 内部定义的变量或 mixin,都调用者可见,因此,它们可以作为它的返回值.如,以下Less代码: .count(@x, @y) {     @sum:(@x + @y);      ...

  6. vue2的动画,混入Mixin,插件,指令,渲染函数,响应式,MVVM

    文章目录 过渡 & 动画 Transition 组件 基于 CSS 的过渡效果 CSS 过渡类名 class 为过渡效果命名 CSS 过渡 transition 实例1: 实例2: CSS 动 ...

  7. vue3组合式api

    文章目录 组合式API介绍 什么是组合式 API? 为什么要有组合式 API? 更好的逻辑复用 更灵活的代码组织 Option Api Option Api的缺陷 Composition Api 更好 ...

  8. [译] ES6+ 中的 JavaScript 工厂函数(第八部分)

    本文讲的是[译] ES6+ 中的 JavaScript 工厂函数(第八部分), 原文地址:JavaScript Factory Functions with ES6+ 原文作者:Eric Elliot ...

  9. 详细分析 Vue3 文档

    之前我就在想,为什么很多人遇到问题都是推荐说:看文档 为什么? 因为文档真的很有用(真香) 这篇文章是个人对于文档中出现内容的理解,在断断续续的一周时间内看一次文档后,compisition API真 ...

最新文章

  1. kindeditor编辑器使用七牛云上传图片
  2. python可变长参数(非关键字及关键字参数)
  3. sweetalert 1.0多次回调函数bug
  4. flutter 动画展开菜单_蒲公英 · JELLY技术周刊 Vol.34: 芜湖~ Flutter
  5. centos 使用rz sz指令
  6. db2字符串定位_DB2/Oracle/SQL server判断某个字符串或单个字符在源字符串中出现的位置...
  7. matlab聚类分析_数据挖掘——聚类分析
  8. 沪漂6年,我终于在上海买了第一套房
  9. access考试素材_access数据库考试试题及答案.doc
  10. 用Python做一个美丽的每日计划
  11. 常用物流快递单号自动识别api接口-快递鸟对接
  12. Win10系统截图新工具的快捷键
  13. 微信公众号可以关联多少个小程序?
  14. QIIME2进阶五_QIIME2扩增子基因序列多样性分析
  15. 10月书讯(下) | 小长假我读这些新书
  16. 洛谷OJ U552 守墓人 线段树模板题
  17. 全志A64平台 TP9950 BT656输入驱动调试(1)环境搭建驱动编写
  18. 【JDBC】使用c3p0数据库连接池的各种报错警告
  19. java国外著名网站
  20. 使用Java来解决鸡兔同笼的问题,现在一个笼子里(只有鸡和兔子)有35个头,94只足,请求出鸡与兔个多少?

热门文章

  1. 【算法】3Sum Closest 最接近的三数之和
  2. 各种各样装修风格的茶室特点
  3. 短视频开发,短视频功能如何实现
  4. 关于textarea限制字数的总结
  5. RxJava flatMap使用
  6. [网络安全学习篇23]:DNS欺骗与钓Y网站(千峰网络安全视频笔记 p114-p116)
  7. 华唯鑫能油来解说生物燃料油的由来
  8. 360影视改版项目总结
  9. Codeigniter 4基础教程(2)-- 版本差异,模板,一个form例子
  10. 2023年全国职业院校技能大赛-软件测试赛题第6套 - GZ034 软件测试