Ответ
Ответ не найден
Ответ 18+ 🔞
А, слушай, вот смотри, есть такая хуйня — useEffect в Реакте. Ну, типа, хук такой. И народ, блядь, его использует так, будто это волшебная палочка: «О, надо что-то сделать после рендера? Щас useEffect впендюрю — и всё заебись!»
А на деле получается пиздец. Код превращается в лапшу, где один эффект зависит от другого, тот от третьего, а в итоге всё ебётся в три смены и непонятно, что когда выполняется. Чувак, это же не мусорка, куда можно скидывать всю побочку!
Вот смотри, классический пример говнокода:
useEffect(() => {
// Запрос за данными
fetchData().then(setData);
// Подписка на событие
const handleClick = () => console.log('click');
window.addEventListener('click', handleClick);
// Таймер какой-то левый
const id = setInterval(() => {
console.log('tick');
}, 1000);
// А теперь надо всё это почистить, ага
return () => {
window.removeEventListener('click', handleClick);
clearInterval(id);
};
}, []); // Массив зависимостей пустой, типа «запустись один раз»
С виду вроде норм, да? Ан нет! Это же, блядь, три независимых хуйни в одном эффекте! Если тебе надо изменить логику подписки на клик, ты лезешь в этот общий комок и рискуешь сломать таймер или запрос. А если зависимости понадобятся? Пипец, начинается.
Правильно-то как? Разделять, сука, ответственность! Один эффект — одна задача. Это как в армии: каждый ебёт свою вонючку, и в общем строю — красота.
// Эффект для данных
useEffect(() => {
fetchData().then(setData);
}, []);
// Эффект для подписки на клик
useEffect(() => {
const handleClick = () => console.log('click');
window.addEventListener('click', handleClick);
return () => window.removeEventListener('click', handleClick);
}, []);
// Эффект для таймера
useEffect(() => {
const id = setInterval(() => {
console.log('tick');
}, 1000);
return () => clearInterval(id);
}, []);
Да, кода стало больше. Зато читается, блядь, в разы легче. Каждый кусок живёт сам по себе, его можно тестить, менять или вообще выкинуть — и ничего не развалится.
И ещё, запомни: пустой массив зависимостей [] — это не «сделай один раз при монтировании». Это «запустись при монтировании и НИКОГДА больше не запускайся». Если тебе нужны актуальные значения из пропсов или стейта внутри эффекта — забудь про пустой массив, пиши зависимости честно. Иначе будешь ловить баги, где стейт пятичасовой свежести, и охуевать, почему ничего не работает.
Короче, useEffect — это не игрушка. Это инструмент, и если им размахивать как дубиной, можно себе же мозги вынести. Думай, что делаешь, и не создавай этих ебаньких монстров.