Observar as alterações nas propriedades de um objeto sempre foi uma tarefa muito procurada; muitos shims foram usados ao longo dos anos para ouvir as alterações nos objetos. Atualmente, temos métodos melhores para ouvir as alterações de objetos: a API Proxy. Sindre Sorhus criou on-change, uma pequena ferramenta JavaScript que permite que o senhor ouça as alterações em objetos e matrizes JavaScript!


on-change JavaScript


Como o código de alteração é muito pequeno, aqui está ele em sua glória completa:



'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);
};


O onChange retorna um proxy que o senhor usará para fazer qualquer alteração no objeto.


Usando o on-change


Passe onChange o objeto que o senhor gostaria de espionar e uma função de tratamento de alterações:



let j = {
    a: 1
};

// Upon change, save to server
let changeable = onChange(j, () => save(j));


Em seguida, use esse proxy para alterar as propriedades e ser notificado sobre as alterações:




// Make a change that would trigger changes
changeable.a = 2;

// save() is triggered!

// j.a === 2


Observe que os valores do objeto original também mudam – essa é a beleza do Proxy! Observe também que o on-change não informa qual propriedade foi alterada; o caso de uso, como Sindre descreve, é salvar um objeto (no servidor etc.) quando qualquer parte de um objeto é alterada. O senhor também poderia usá-lo para uma pequena biblioteca com uma função de renderização, renderizando novamente o conteúdo sempre que uma propriedade for alterada!


Essa biblioteca on-change é muito boa se o senhor não precisar saber qual propriedade foi alterada, apenas que alguma coisa mudou.