import { Ref, ref, watch } from 'vue'; import { nextFrame } from '../utils'; interface ChangableValue { change: Ref; value: Ref; stop: () => void; } /** * 创建一个监听响应式变量更改的,可以用于Changable的监听器 * @param value 要监听的值 */ export function createChangable( value: Ref, key?: keyof T ): ChangableValue { const change = ref(false); const stop = watch(value, (n, o) => { if (key) { if (n[key] === o[key]) return; } if (change.value) { change.value = false; nextFrame(() => (change.value = true)); } else { change.value = true; } }); return { change, value, stop }; }