Что относится к Side Effect

Ответ

Side effects (побочные эффекты) — это любые изменения состояния вне функции или взаимодействие с внешним миром. В React к ним относятся:

  • Запросы к API (fetch, axios)
  • Подписки (setInterval, addEventListener)
  • Прямые манипуляции с DOM (document.title)
  • Логирование (console.log)
  • Глобальные изменения (localStorage, Redux dispatch)

В React хуке useEffect такие операции выполняются после рендера:

useEffect(() => {
  const timer = setInterval(() => {
    console.log('Tick');
  }, 1000);

  return () => clearInterval(timer); // cleanup
}, []);

Чистые функции не имеют side effects — их результат зависит только от входных данных.

Ответ 18+ 🔞

Вот, смотри, про эти ваши сайд-эффекты, блядь. Ну, то есть, побочки всякие, понимаешь? Это когда функция, такая, вроде бы должна просто посчитать что-то и отдать, а она, сука, лезет куда не просят, нахуй.

Типа, представь: ты вызвал функцию, чтобы она тебе число вернула, а она, пидарас шерстяной, пока считала, ещё и письмо твоей мамке отправила, в консоль накакала и таймер на пять лет завела. Вот это и есть side effect, ёпта. Всякая хуйня, которая происходит помимо основного результата.

В нашем, в реактовском царстве-государстве, к таким пакостям относят:

  • Запросы куда-то — ну, это когда ты к серваку лезешь, fetch или axios там свой суёшь.
  • Подписки всякие — типа setInterval, чтобы каждую секунду пищать, или слушатели событий (addEventListener), которые, как шпионы, за всем следят.
  • Прямые манипуляции с DOM — ой, это вообще отдельная песня. Когда ты в лоб document.title меняешь, будто ты не в Реакте, а в каком-нибудь 2007 году.
  • Логирование — это твои любимые console.log, которые по всему коду разбросаны, как говно по полю.
  • Глобальные изменения — запихнул что-то в localStorage, диспатч в Redux отправил — всё, блядь, мир вокруг изменился.

И вся эта ебанина в хуке useEffect и происходит, потому что он как раз для такого грязного дела и создан. Выполняется эта пакость после того, как компонент нарисовался.

Вот смотри, пример, чтобы не быть мудаком:

useEffect(() => {
  // Вот тут мы делаем сайд-эффект, блядь — интервал заводим.
  const timer = setInterval(() => {
    console.log('Tick'); // И каждый тик в консоль гадим.
  }, 1000);

  // А это, хитрая жопа, функция очистки. Чтобы когда компонент сдохнет, не оставить за собой говна.
  return () => clearInterval(timer); // cleanup, ёпта!
}, []); // Пустой массив зависимостей — значит, запустится один раз, примонтируется и всё.

А чистые функции — это святые, блядь. Они нихуя не трогают, ни с кем не взаимодействуют. Дали им данные на вход — они тебе результат на выход. И всё. Ни писем мамке, ни таймеров. Предсказуемые, как день зарплаты. Красота, ёперный театр!