Redux: Normalizzazione Risposte API con normalizr

che cosa succede se il nostro sistema ha alcuni altri estranei azione che restituisce anche una promessa con un campo di risposta, e quindi, in tale scenario, il nostro byId Riduttore sarebbe anche un tentativo di gestire questa estranei azione, che sarebbe un bug.

@Mickey, hai ragione. Un’altra azione potrebbe facilmente avere una proprietà response per coincidenza o supervisione e quindi essere elaborata da byId involontariamente. Questa implementazione si basa su di noi per ricordare che qualsiasi proprietà con quel nome verrà rilevata da quel riduttore. Potrebbe avere più senso se il nome della proprietà fosse specifico per “todos”, ma invece è il generico response. È facile immaginare di espandere questa app per recuperare ulteriori tipi di dati e inviare azioni non todo che hanno anche una proprietà response.

Il risultato sarebbe molto probabilmente un bug, come hai detto tu. Il codice corrente si diffonde action.response.entities.todos in state per todos, quindi si aspetta che qualsiasi proprietà response sia un oggetto con una proprietà entities, che a sua volta ha una proprietà todos. Se stessimo usando normalizr per questi ipotetici altri dati recuperati, probabilmente includerebbe la stessa proprietà entities, ma presumo che avrebbe qualche altro nome di dizionario all’interno invece di todos. In tal caso, il valore che viene diffuso in state sarebbe undefined, che quando la diffusione non ha alcun effetto, quindi probabilmente sarebbe OK, anche se per fortuna. Se non stessimo usando normalizr per quell’altro fetch, molto probabilmente entities sarebbe undefined, e poi quando il codice ha provato a leggere todos fuori di esso, l’app genererebbe un errore.

Capisco il desiderio di semplificare il codice del riduttore, ma questo sembra andare troppo lontano, in un modo antitetico a Redux stesso. Ci affidiamo a normalizr per coerenza, non Redux, e mentre stiamo ancora usando le azioni, stiamo ignorando i loro tipi, che ho pensato fosse la chiave per la potenza dello strumento. Stiamo rinunciando al controllo di precisione a favore della fiducia che una certa struttura arbitraria significhi sempre la stessa cosa. Non me la bevo.

Nel complesso, trovo che questa particolare lezione sia un po ‘ strana. Non sono sicuro del perché sia qui, in questo corso altrimenti eccellente. Sono sicuro che normalizr è un buon strumento e posso immaginare come potrebbe essere incredibilmente potente in un ambiente molto controllato. Forse questa lezione non è abbastanza sostanziale per rendere giustizia. Certamente la funzionalità di normalizr stessa mi sembra ancora un po ‘ magica; questa non è un’immersione profonda.

Sono d’accordo con il punto di @Enoh che la complessità normalizr introduce è eccessivo per questa applicazione. Allo stesso tempo, capisco che questo corso sta camminando una linea sottile, cercando di dimostrare pratiche e concetti sofisticati senza prendere il tempo aggiuntivo sostanziale necessario per costruire un app che in realtà ha bisogno di tale raffinatezza. Il più delle volte non mi infastidisce, a parte occasionalmente confondermi, ma penso che avremmo potuto saltare questo particolare argomento.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.