Skip to content

Composition API 如何实现逻辑复用

这样做的

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

列子,useMousePosition.js

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;

在组件中使用

js
<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>

基于 MIT 许可发布