You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

24 lines
394 B

const watch = (target, callback)=>{
for(const key in target){
if(typeof target[key] === 'object'){
target[key] = watch(target[key], callback)
}
}
return new Proxy(target, { set: callback })
}
const state = watch(
{
name: 'matt',
friend: {
name: 'bob'
}
},
(target, prop, newValue) => {
console.log(newValue);
}
)
//state.name = 'Matthew'
state.friend.name = 'Bilbo'