React · Middle · Запитання 12 з 75
Чому цей ефект виконується після кожного рендеру?
const options = { roomId, serverUrl };
useEffect(() => {
const conn = connect(options);
return () => conn.close();
}, [options]);- ✓Правильна відповідь:
options- новий об'єкт на кожному рендері - 2Об'єкти в залежностях завжди перезапускають ефект
- 3Бо
connect- асинхронна функція з промісом
Пояснення
Залежності порівнюються через Object.is, а новий об'єктний літерал ніколи не дорівнює попередньому. Правильно - створити об'єкт усередині ефекту й залежати від примітивів: [roomId, serverUrl]. Придушувати лінтер - погана ідея.