使用 reactive 响应式对象的方式改造,我这样改造可以吗老师?有没有更优雅的写法呢。请老师指点一下,谢谢,辛苦了
来源:3-12 vue3 模块化妙用- 鼠标追踪器
带带弟弟
2020-10-28
import {onMounted, onUnmounted, ref, reactive, toRefs} from 'vue';
// 抽离的功能
export const useMounsePosition = () => {
const x = ref(0);
const y = ref(0);
const updateMouse = (e: MouseEvent): void => {
x.value = e.pageX;
y.value = e.pageY;
};
onMounted((): void => {
document.addEventListener('click', updateMouse, false);
});
onUnmounted((): void => {
document.removeEventListener('click', updateMouse, false);
});
return {
x,
y,
}
};
// 抽离的功能 改成使用 reactive
export const useMounsePositionReactive = () => {
const data = reactive({
x: 0,
y: 0,
updateMouse: (e: MouseEvent ): void => {
data.x = e.pageX;
data.y = e.pageY;
},
// 这里统一管理生命周期的方法
onTed: (): void => {
onMounted((): void => {
document.addEventListener('click', data.updateMouse, false);
});
onUnmounted((): void => {
document.removeEventListener('click', data.updateMouse, false);
});
}
});
data.onTed();
const dataToRefs = toRefs(data);
return {
...dataToRefs
}
}
// 调用部分
import { useMounsePosition, useMounsePositionReactive } from './hooks/useMounsePosition';
const { x, y } = useMounsePositionReactive();
写回答
1回答
-
张轩
2020-10-29
同学你好 基本思想就是使用 reative 代替 ref,我有点在你的代码中没明白的就是 onMounted onUnmounted 生命周期为什么要单独的放在一个函数中,然后再调用它呢?像原始的代码中那样完成你觉得有什么问题呢?
00
相似问题