Guida · Estendere
Handler ed effetti tuoi
Il pacchetto porta i canali, il progetto porta le risposte. Sono due registri, e restano separati anche quando parlano della stessa cosa.
Dove siamo
Sai emettere eventi e sai che il vocabolario è l’unione di dichiarati e risposti. Alla fine di questo capitolo la risposta sarà tua.
Il gesto
Apri src/app-events.ts. Ci sono due mappe: gli handler e gli effetti.
Un handler risponde a un evento per nome. Un effetto è codice richiamabile da run.
Aggiungi la tua voce nella mappa giusta. Il merge con quelle del pacchetto è già lì.
export const appEffects = {
logNode: ({ node, payload }) => {
console.log('[custom effect]', node?.tagName, payload)
},
}La differenza fra i due
Un handler risponde a un evento: qualcuno ha detto che è successo qualcosa, e questa è la reazione. Un effetto è un’azione con un nome, che un blocco può chiamare con run senza passare per il bus.
La regola che li tiene puliti è quella dei reducer, vista da qui: la logica di transizione sta nel reducer, l’effetto relaziona con il mondo — logga, naviga, chiama. Un effetto che decide è una regola nascosta.
I middleware, che vedono passare tutto
Fra l’emissione e gli handler c’è una catena di middleware. Un middleware può lasciar passare un evento, trasformarlo, o annullarlo.
È il posto giusto per ciò che riguarda tutti gli eventi e nessuno in particolare: tracciamento, filtri, diagnostica in sviluppo. Metterci una regola di dominio è il modo più efficace di renderla introvabile.
Quando non funziona
Registra un handler con un nome che nessun blocco emette. Non succede niente, per sempre, e nessuno lo segnala.
È l’altra metà del problema del vocabolario: si può dichiarare un canale senza risposte, e si può scrivere una risposta senza canale. Il controllo è nel check:events, non nel motore.
Avanti
Il sistema è esteso. Restano gli strumenti che ci lavorano sopra.