两个对象咋比较?参数变没变?何时更新?
今天早上坐车的时候忽然想到proxy能够拦截,~~~ O(∩_∩)O哈哈~ ~~~javascript
const initState = {
a: 1,
}
const observer = (initState={}) => {
let timer = null;
let getStateCallback = ()=>{};
const raf = setTimeout;
const cancelRaf = clearTimeout;
const proxy = new Proxy(initState, {
set: function(target, key, value, receiver) {
if (value === target[key]) {
console.log('-----do not update----');
} else {
console.log('-----update----');
target[key] = value;
cancelRaf(timer)
timer = raf(function(){
getStateCallback(target);
cancelRaf(timer)
},4);
}
return true;
},
});
const setState = newState => {
Object.assign(proxy,{...newState})
};
const getState = cb => {
getStateCallback = cb;
}
return {
getState,
setState,
}
}
const proxy = observer(initState);
proxy.setState({
a:1,
});
proxy.getState(v=>{
console.log(v);
});
复制代码