Używam ReactJs z Redux i na niektórych tutoriali i kodów Widzę ludzi sugerujących i używających normalizr do utrzymać stan płaski. Ale jaka jest prawdziwa zaleta w utrzymaniu tego płasko? Czy napotkam jakieś problemy, jeśli tego nie zrobię? Czy to konieczne ?Dlaczego miałbym zachować stan płaski
Odpowiedz
trzech głównych powodów:
- Aktualizowanie zagnieżdżony JavaScript obiektów niezmiennie prowadzi na ogół brzydsze kodu, który jest trudniejszy do utrzymania, chyba że używasz bibliotekę użytkową, by zakończyć proces
- niezmiennie aktualizowanie zagnieżdżonych danych wymaga, że zwracasz nowe kopie wszystkich elementów w hierarchii zagnieżdżania. Ponieważ komponenty generalnie porównują dane porównawcze płytkiej równości na danych, aby sprawdzić, czy wymagają one aktualizacji, aktualizacja danych zagnieżdżonych zwykle oznacza, że więcej obiektów jest aktualizowanych, a więcej komponentów będzie prawdopodobnie musiało zostać ponownie wyświetlonych, nawet jeśli rzeczywiste dane nie są różne.
- Dane płaskie, a w szczególności dane znormalizowane, umożliwiają bardziej zoptymalizowane podejścia do definiowania komponentów (takie jak lista, gdzie każdy element listy jest połączony, z identyfikatorem przedmiotu jako podpory i jest odpowiedzialny za wyszukiwanie własnych dane pozycji według tego identyfikatora)
Przyjmuję, że utrzymując go płasko, masz na myśli, że nie masz gniazdowania w swoim obiekcie stanu.
Nie zaleca się zagnieżdżania w swoim stanie, ponieważ musisz zmieniać stan według niektórych zdarzeń.
Jeśli spojrzysz na dokumentację redux, chcą, abyś miał czyste reduktory. Częścią tego, że twoja funkcja jest czysta, nie jest modyfikowanie jej argumentów.
Gdy masz dużo zagnieżdżenia, trudno jest zmienić stan bez przypadkowego modyfikowania obiektu stanu, ponieważ wszystkie obiekty JS są przekazywane przez odniesienie. Kiedy masz dużo zagnieżdżania, musisz wykonać głębokie kopie obiektu stanu przed jego modyfikacją.
Wielkie dzięki! teraz nie mogę sobie wyobrazić, aby nie spłaszczyć moich stanów :) –
wielkie dzięki za twoją wspaniałą odpowiedź. całkowicie mnie przekonał i pomógł mi to lepiej zrozumieć :) –