Guida · Estendere
Un resolver tuo
Il passaggio da dato a descrittore è una funzione, e la funzione si può sostituire. È il punto più profondo in cui il sistema si apre.
Dove siamo
Sai che fra il blocco e il disegno c’è UIMS.resolve. Alla fine di questo capitolo saprai cosa fa dentro, e come metterci il tuo.
Il gesto
Sempre in src/uimsContext.ts, accanto ai componenti c’è la mappa dei resolver.
Aggiungi una voce con il tipo di blocco come chiave.
La funzione riceve il blocco e restituisce un descrittore.
const resolvers = { ...uimsResolvers, mioBlocco: risolviMioBlocco }Cos’è appena successo
La mappa dei resolver associa un tipo di blocco alla funzione che lo traduce. Il resolver di default fa quasi tutto — legge il viewMode, espande gli stili, prepara gli slot — quindi un resolver proprio serve solo quando la traduzione ha una regola che il caso generale non copre.
Il contratto è lo stesso descrittore di sempre, e vale la regola che regge tutto: i dati di dominio vanno in data e in nessun’altra chiave. Metterli altrove funziona, e rompe la proprietà per cui un componente non sa quale blocco l’ha generato.
Prima di scriverne uno
Quasi sempre non serve. Una forma diversa è un viewMode, un aspetto diverso è uno stile, un comportamento diverso è un uiState.
Un resolver proprio serve quando cambia il modo in cui il dato diventa descrittore: una sorgente che va interrogata, una struttura da appiattire, dei figli da generare invece che da leggere.
Quando non funziona
Restituisci un descrittore senza Component. Il renderer non sa cosa disegnare e non disegna: nessun errore, nessun nodo.
Un blocco che «sparisce» dopo l’aggiunta di un resolver è quasi sempre questo, o una chiave di dominio finita fuori da data.
Avanti
Ultimo punto di estensione: il codice che risponde.