tracked
Version:
A 300 byte @tracked property decorator for Preact.
20 lines (19 loc) • 413 B
JavaScript
export default function tracked(obj, key, desc) {
let setter = {};
function initialize() {
Object.defineProperty(this, key, {
configurable: true,
get: () => this.state[key],
set: v => { setter[key] = v; this.setState(setter); }
});
return this.state[key] = desc.initializer();
}
return {
configurable: true,
set(v) {
initialize.call(this);
this[key] = v;
},
get: initialize
};
}