跳到主要内容

Composition API 如何实现逻辑复用

这样做的

  • 抽离逻辑代码到一个函数
  • 函数命名约定为 useXxxx 格式 (React Hooks 也是)

列子,useMousePosition.js

import {ref, onMounted, onUnmounted} from "vue";

function useMousePosition() {
const x = ref(0)
const y = ref(0)

function update(e) {
x.value = e.pageX
y.value = e.pageY
}

onMounted(() => {
window.addEventListener('mousemove', update)
})

onUnmounted(() => {
window.removeEventListener('mousemove', update)
})

return {
x,
y
}
}

export default useMousePosition

在组件中使用

<template>
<p>mouse position {{ x }}-{{ y }}</p>
</template>

<script>

import useMousePosition from "./useMousePosition.js";

export default {
name: "MousePosition",
setup() {
const {x, y} = useMousePosition()

return {
x, y
}
}
}
</script>