O estado do $mol comporta-se como uma planilha: você declara como um valor é calculado, e tudo o que depende dele se atualiza sozinho. Sem stores, sem dispatch, sem hooks de efeito — o grafo de dependências rastreia o que recalcular.
Um método decorado com @ $mol_mem é uma célula reativa em cache. Ele executa uma vez, lembra seu resultado e só recalcula quando algo que ele leu mudou.1namespace $.$${2export class $my_counterextends$.$my_counter{3@ $mol_memcount(){return 0}45@ $mol_memdoubled(){6return this.count()*27}8}9}doubled lê count, então se inscreve em count automaticamente. Altere count e toda vista que mostra doubled se atualiza — não há nada para inscrever manualmente.
Uma propriedade é getter e setter ao mesmo tempo: chame-a sem argumento para ler, com um argumento para escrever.1@ $mol_action2increment(){3this.count(this.count()+1)4}
Essa única distinção mantém o código reativo previsível:@ $mol_mem é uma computação pura — apenas lê outras células e retorna um valor.@ $mol_action é um efeito — escritas no estado, chamadas de rede e temporizadores pertencem aqui.Escrever em uma célula de dentro de um @ $mol_mem cria um laço de realimentação (a escrita invalida uma dependência, que recalcula, que escreve de novo). O $mol relata isso como uma inscrição circular. A correção é sempre a mesma: mantenha os efeitos colaterais nas ações, mantenha as computações puras.Em @ $mol_mem você podemas nãoOs manipuladores de botão são gerados como @ $mol_mem na classe base; sobrescreva-os com @ $mol_action para que possam escrever com segurança:1@ $mol_action2submit(){3this.saved(true)4}