let _effectFn = null;
function signal(val) {
const effectFns = [];
return {
get value() {
effectFns.push(_effectFn);
return val;
},
set value(_val) {
val = _val;
for (const effectFn of effectFns) {
effectFn();
}
}
}
}
function effect(effectFn) {
_effectFn = effectFn;
effectFn();
_effectFn = null;
}
function computed(compFn) {
const newSignal = signal();
effect(() => {
const val = compFn();
newSignal.value = val;
})
return newSignal;
}
const data = signal(0);
const computedData = computed(() => data.value * 2);
effect(() => {
console.log('Effect Fn: ', computedData.value);
});
data.value = 89;
data.value = 79;
Top comments (0)