26 lines
739 B
JavaScript
26 lines
739 B
JavaScript
import { computed, ref, watch } from 'vue';
|
|
function useMemo(getterOrOptions) {
|
|
const computedValueRef = computed(getterOrOptions);
|
|
// Maybe it's not possible to lazy evaluate the value, since we can't make
|
|
// render phase capture the deps behind useMemo
|
|
const valueRef = ref(computedValueRef.value);
|
|
watch(computedValueRef, (value) => {
|
|
valueRef.value = value;
|
|
});
|
|
if (typeof getterOrOptions === 'function') {
|
|
return valueRef;
|
|
}
|
|
else {
|
|
return {
|
|
__v_isRef: true,
|
|
get value() {
|
|
return valueRef.value;
|
|
},
|
|
set value(v) {
|
|
getterOrOptions.set(v);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
export default useMemo;
|