Zakładając, że mam dwie sytuacje:
- Logikę, która wykonuje się w komponencie i która jest dodana do useEffecta. useEffect nie ma podanej tablicy zależności.
- Logikę, która wykonuje się bezpośrednio w komponencie bez używania useEffecta.
Użycie useEffect(func, [])
(z pustą tablicą) znaczy "zmiana żadnej property nie wpłynie na odnowienie efektu", czyli pusta tablica znaczy []
: "nigdy".
Użycie useEffect(func)
(bez tablicy), znaczy "zmiana każdej property wypłnie na odnowienie efektu", czyli nie przekazanie tablicy znaczy prawie to samo co nie używanie useEffect()
w ogóle. Możesz sobie tłumaczyć że domyślnie jako array przekazane są wszystkie propy.
To teraz pojawia się pytanie po co w ogóle useEffect()
bez tablicy, skoro można "po prostu" wywołać sobie tą funkcję. Ano właściwie tylko po to żeby nie zablokować rendera (bo kod w useEffect()
jest asynchroniczny, i nie blokuje renderowania komponentu).
Jaka jest różnica pomiędzy tymi dwoma sytuacjami ? W przypadku drugiej sytuacji komponent zwraca mi błąd, że wykonano zbyt wiele ponownych renderingów. Natomiast w przypadku pierwszej sytuacji już takiego błędu nie zwraca i aplikacja uruchamia się poprawnie.
Pewnie masz setState()
na jakąś property.