import { ref, onMounted, onUnmounted } from 'vue'// 컴포저블 함수는 특별한 것이 아니라, 그냥 함수입니다.export function useMouse() { // 컴포저블 내부에서 상태를 관리합니다. const x = ref(0) const y = ref(0) // 컴포저블 내부에서 생명주기 훅을 사용하여 이벤트를 관리할 수 있습니다. function update(event: MouseEvent) { x.value = event.pageX y.value = event.pageY } onMounted(() => window.addEventListener('mousemove', update)) onUnmounted(() => window.removeEventListener('mousemove', update)) // 관리하던 상태를 객체로 반환하여 외부 컴포넌트에서 사용할 수 있도록 합니다. return { x, y }}
<script setup lang="ts">// 우리가 만든 컴포저블을 임포트합니다.import { useMouse } from '@/composables/useMouse'// 함수를 호출하여 마우스 위치 상태를 가져옵니다.const { x, y } = useMouse()</script><template> <div> 마우스 위치: {{ x }}, {{ y }} </div></template>
复杂的事件监听器添加、移除逻辑,都隐藏在 useMouse 函数内部。
组件只需获取并使用 x 和 y 这两个状态。