利用 Vue 的组合式 API 来封装和
复用有状态逻辑
的函数 — 把js/ts代码封装成一个方法。
约定和最佳实践
1 | import { unref } from 'vue' |
返回值
- 约定:组合式函数始终返回一个包含多个 ref 的普通的非响应式对象(因为ref可以维持在解构过程中与组合式函数内状态的响应式连接)
- reactive(组合式函数) – 以对象属性的形式来使用组合式函数中返回的状态
副作用:组件挂载后在调用生命周期钩子并及时清理
限制:
- 组合式函数在
<script setup>
或setup()
钩子中,应始终被同步
地调用。在某些场景下,也可以在onMounted()
中使用。
- 组合式函数在
在选项式 API 中使用组合式函数
- 组合式函数必须在setup()中调用,且其返回的绑定必须在setup()中返回
- 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import { useMouse } from './mouse.js'
import { useFetch } from './fetch.js'
export default {
setup() {
const { x, y } = useMouse()
const { data, error } = useFetch('...')
return { x, y, data, error }
},
mounted() {
// setup() 暴露的属性可以在通过 `this` 访问到
console.log(this.x)
}
// ...其他选项
}