<button id="btn">点击添加123</button>
<div id="content"></div>
<script type="module">
let activeEffect = null;
function getProxy(obj,effectmap) {
return new Proxy(obj, {
get(target, key, receiver) {
console.log('get', key);
console.log(effectmap);
if(activeEffect){
if(!effectmap[key]){
effectmap[key] =[]
}
effectmap[key].push(activeEffect);
console.log("effectmap=====",effectmap);
}
return Reflect.get(target, key, receiver);
},
set(target, key, value, receiver) {
console.log('set', key, value);
effectmap[key].forEach(fn => {
fn();
});
return Reflect.set(target, key, value, receiver);
}
});
}
function reative(obj) {
let effectmap = {}
return getProxy(obj,effectmap);
}
function ref(value){
return reative({value})
}
function effect(fn) {
activeEffect = fn;
fn();
activeEffect = null;
}
console.log("-------------------------------")
const btn = document.getElementById('btn')
const content = document.getElementById('content')
const state = reative({
count: 0
});
const nums=ref(1)
effect(() => {
content.textContent = state.count+"|";
content.textContent +=nums.value;
});
btn.onclick = () => {
state.count++
nums.value+=2
}
</script>