Redux: normaliseren van API Responses met normalizr

wat als ons systeem een andere niet-gerelateerde actie heeft die ook een belofte geeft met een reactieveld, en dus in dat scenario, zou onze byId Reducer ook proberen om deze niet-gerelateerde actie af te handelen, wat een bug zou zijn.

@Mickey, je hebt gelijk. Een andere actie kan gemakkelijk een eigenschap response hebben bij toeval of oversight en dus onbedoeld door byId worden verwerkt. Deze implementatie is afhankelijk van ons om te onthouden dat elke woning met die naam zal worden opgepikt door dat reductiemiddel. Het zou zinvoller zijn als de eigenschapsnaam specifiek was voor “todos”, maar in plaats daarvan is het de generieke response. Het is gemakkelijk voor te stellen dat we deze app uitbreiden om extra soorten gegevens op te halen en niet-todo-acties te verzenden die ook een response – eigenschap hebben.

het resultaat zou hoogstwaarschijnlijk een bug zijn, zoals u al zei. De huidige code verspreidt action.response.entities.todos naar state voor todos, dus verwacht het dat elke response eigenschap een object is met een entities eigenschap, die zelf een todos eigenschap heeft. Als we normalizr zouden gebruiken voor deze hypothetische andere opgehaalde gegevens, zou het waarschijnlijk dezelfde entities eigenschap bevatten, maar ik neem aan dat er een andere woordenboeknaam in zou zitten in plaats van todos. In dat geval zou de waarde die wordt verdeeld in state undefined zijn, wat geen effect heeft, dus dat zou waarschijnlijk OK zijn, zij het door geluk. Als we normalizr niet gebruikten voor die andere fetch, dan zou waarschijnlijk entities undefined zijn, en als de code dan todos probeerde weg te lezen, zou de app een fout geven.

ik begrijp de wens om de reducer code te vereenvoudigen, maar dit lijkt te ver te gaan, op een manier die haaks staat op Redux zelf. We vertrouwen op normalizr voor consistentie, niet Redux, En terwijl we nog steeds acties gebruiken, negeren we hun types, waarvan ik dacht dat het de sleutel was tot de kracht van het gereedschap. We geven precisiecontrole op ten gunste van het vertrouwen dat een bepaalde willekeurige structuur altijd hetzelfde betekent. Ik geloof het niet.

over het geheel genomen vind ik deze les een beetje vreemd. Ik weet niet zeker waarom het hier is, in deze anders uitstekende cursus. Ik weet zeker dat normalizr een goed hulpmiddel is, en ik kan me voorstellen hoe het ongelooflijk krachtig kan zijn in een zeer gecontroleerde omgeving. Misschien is deze les niet substantieel genoeg om dat recht te doen. Zeker de functionaliteit van normalizr zelf lijkt me nog steeds een beetje magisch; dit is geen diepe duik.

ik ben het eens met @Enoh ‘ s punt dat de complexiteit normalizr introduceert is overkill voor deze app. Tegelijkertijd, ik begrijp dat deze cursus is het lopen van een dunne lijn, proberen om geavanceerde praktijken en concepten aan te tonen zonder de aanzienlijke extra tijd die nodig is om een app die eigenlijk nodig heeft dergelijke verfijning te bouwen. Meestal stoort het me niet, anders dan me af en toe in de war te brengen, maar ik denk dat we dit specifieke onderwerp hadden kunnen overslaan.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.