Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mrenty
Created December 31, 2017 12:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrenty/c33c4ab58c7e3e0cf157e3700430eff6 to your computer and use it in GitHub Desktop.
Save mrenty/c33c4ab58c7e3e0cf157e3700430eff6 to your computer and use it in GitHub Desktop.
Watch object changes
let j = {
a: 1
};
// Upon change, save to server
let changeable = onChange(j, () => save(j));
// Make a change that would trigger changes
changeable.a = 2;
// save() is triggered!
// j.a === 2;
'use strict';
module.exports = (object, onChange) => {
const handler = {
get(target, property, receiver) {
try {
return new Proxy(target[property], handler);
} catch (err) {
return Reflect.get(target, property, receiver);
}
},
defineProperty(target, property, descriptor) {
onChange();
return Reflect.defineProperty(target, property, descriptor);
},
deleteProperty(target, property) {
onChange();
return Reflect.deleteProperty(target, property);
}
};
return new Proxy(object, handler);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment