$mol-Zustand verhält sich wie eine Tabellenkalkulation: Sie deklarieren, wie ein Wert berechnet wird, und alles, was davon abhängt, aktualisiert sich von selbst. Keine Stores, kein Dispatch, keine Effect-Hooks — der Abhängigkeitsgraph verfolgt, was neu berechnet werden muss.
Eine mit @ $mol_mem dekorierte Methode ist eine zwischengespeicherte, reaktive Zelle. Sie läuft einmal, merkt sich ihr Ergebnis und berechnet nur dann neu, wenn sich etwas geändert hat, das sie gelesen hat.1namespace $.$${2export class $my_counterextends$.$my_counter{3@ $mol_memcount(){return 0}45@ $mol_memdoubled(){6return this.count()*27}8}9}doubled liest count und abonniert count daher automatisch. Ändern Sie count, und jede Ansicht, die doubled zeigt, wird aktualisiert — es gibt nichts von Hand zu abonnieren.
Eine Eigenschaft ist sowohl Getter als auch Setter: Rufen Sie sie ohne Argument auf, um zu lesen, mit einem Argument, um zu schreiben.1@ $mol_action2increment(){3this.count(this.count()+1)4}
Diese eine Unterscheidung hält reaktiven Code vorhersehbar:@ $mol_mem ist eine reine Berechnung — liest nur andere Zellen und gibt einen Wert zurück.@ $mol_action ist ein Effekt — Schreibvorgänge in den Zustand, Netzwerkaufrufe und Timer gehören hierher.Das Schreiben in eine Zelle aus einem @ $mol_mem heraus erzeugt eine Rückkopplungsschleife (das Schreiben invalidiert eine Abhängigkeit, die neu berechnet und erneut schreibt). $mol meldet dies als zirkuläres Abonnement. Die Lösung ist immer dieselbe: Halten Sie Seiteneffekte in Aktionen, halten Sie Berechnungen rein.In @ $mol_mem dürfen Sieaber nichtButton-Handler werden als @ $mol_mem auf der Basisklasse generiert; überschreiben Sie sie mit @ $mol_action, damit sie sicher schreiben können:1@ $mol_action2submit(){3this.saved(true)4}