Poznamy, czym są reaktywne zmienne i jak je osiągnąć za pomocą obiektu Proxy. Dobra lekcja po mutation observerach oraz początkach frameworków frontendowo-reaktywnych.
Ok, rzućmy okiem na ten kod:
let name = "John";
let fullname = name + " " + "Doe";
console.log(fullname);
//John Doe
name = "Jane";
console.log(fullname);
//John Doe
To już wiemy, czym jest brak reaktywności zmiennej. Teraz poznajmy zmienną reaktywną, do dowolnego kompilatora svelte online musimy wkleić ten kod:
<script>
let name = 'John';
$: fullname = name + " " + "Doe";
$: console.log(fullname);
setTimeout(function(){
name = "Jane";
}, 3000);
</script>
Dostaniemy najpierw John Doe, potem Jane Doe. Ok, ale jak to osiągnąć w czystym JS? Za pomocą proxy:
let name = {
name: "John"
};
let fullname = name.name + " Doe";
const nameHandler = {
set(obj, prop, value){
fullname = value + " Doe";
}
}
let nameProxy = new Proxy(name, nameHandler);
console.log(fullname);
//John Doe
nameProxy.name = "Jane";
console.log(fullname);
//Jane Doe
Proxy działa na obiektach, ponadto posiada więcej „pułapek” jak się one nazywają, niż tylko set i niedługo poznamy je wszystkie, na razie niech nam tyle wystarczy.