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