React · Middle · Pytanie 12 z 75
Dlaczego ten efekt wykonuje się po każdym renderze?
const options = { roomId, serverUrl };
useEffect(() => {
const conn = connect(options);
return () => conn.close();
}, [options]);- ✓Poprawna odpowiedź:
optionsto nowy obiekt przy każdym renderze - 2Obiekty w zależnościach zawsze ponownie uruchamiają efekt
- 3Bo
connectto funkcja async zwracająca promise
Wyjaśnienie
Zależności porównuje się przez Object.is, a nowy literał obiektu nigdy nie jest równy poprzedniemu. Poprawnie jest utworzyć obiekt wewnątrz efektu i zależeć od prymitywów: [roomId, serverUrl]. Wyciszanie lintera to zły pomysł.