handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
}, [props.friend.id]);
по идее при анмаунте компонента, но зачем тут handle status создается в еффекте?
Нет, перед следующим выполнением этого эффекта
это с доки пример
но прикол в том что она постоянно будет создаваться
а какая альтернатива?
так просто вынести с useEffect, а оттуда ее вызывать, а создавать в компоненте
в конструкторе типа?
это же функциональный тут нет конструктора
почему постоянно?
при отработки еффекта
там пустые зависимости это ровно одна отработка, т.е. === размонтирование будет
а так разве не будет создаваться на каждом рендере?
только при маунте, при рерентдере создаются, когда ты стрелочную вешаешь на onClick в DOMe и те, что в useEffecte при срабатываниии эффектов
каким образом только при маунте, если тело функционального компонента выполняется на каждом рендере, и там будет объявлена функция?
мне ментор обьяснял, что функции в теле хранятся в памяти и заново не создаются
что за память такая?
Увы, он не прав
Вот примерный код, который доказывает обратное, если покликать на кнопку и посмотреть вывод в консоль https://codesandbox.io/s/wonderful-mendeleev-bzfey?file=/src/App.js
ща, попытаюсь чтото в нете найти
Код же подтверждает что нет равенства между функциями
но тут может useRef перезаписывается, и потому он не равен, а может и наоборот. Хочу найти какое-то четкое обьяснение чтобы для себя понять как оно на самом деле
что значит useRef перезаписывается, где? Зачем бы он тогда был нужен?
и зачем бы тогда был нужен useCallback, если бы всё так работало?
похоже я потерпел фиаско, немогу ничего придумать в оправдание
Обсуждают сегодня