WoodyLabBuild with UIMS

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.

Handler ed effetti tuoi · WoodyLab