Приведи пример использования жизненного цикла компонента React

Ответ

В React классовые компоненты имеют методы жизненного цикла, а функциональные используют хуки. Пример с классом:

class Example extends React.Component {
  componentDidMount() {
    console.log('Компонент монтирован');
    // Загрузка данных, подписки
  }

  componentDidUpdate(prevProps) {
    if (this.props.value !== prevProps.value) {
      console.log('Значение пропса изменилось');
    }
  }

  componentWillUnmount() {
    console.log('Компонент будет размонтирован');
    // Отписки, очистка таймеров
  }

  render() {
    return <div>{this.props.value}</div>;
  }
}

Для функциональных компонентов:

function Example({ value }) {
  useEffect(() => {
    console.log('Монтирование/обновление');
    return () => console.log('Размонтирование');
  }, [value]); // Зависимости

  return <div>{value}</div>;
}

Ответ 18+ 🔞

А, ну вот, смотри, классика жанра, блядь! Эти ваши классовые компоненты — как старый дед с костылями, который всё помнит, где у него что болит. Ты ему кричишь: «Деда, монтируйся!», а он тебе в ответ: «Щас, внучек, componentDidMount вызову, консольку потревожу, данные подтяну, подписки развешу, ёпта!».

Вот смотри, как это выглядит, этот старый пердун:

class Example extends React.Component {
  componentDidMount() {
    console.log('Компонент монтирован');
    // Загрузка данных, подписки
  }

  componentDidUpdate(prevProps) {
    if (this.props.value !== prevProps.value) {
      console.log('Значение пропса изменилось');
    }
  }

  componentWillUnmount() {
    console.log('Компонент будет размонтирован');
    // Отписки, очистка таймеров
  }

  render() {
    return <div>{this.props.value}</div>;
  }
}

Видишь эту простыню? Это ж надо было всё это запоминать, блядь! Где что вызывается, куда что пихать. componentDidUpdate — это вообще отдельная песня, там надо было сравнивать пропсы вручную, как будто мы в каменном веке, сука! А если забыть отписаться в componentWillUnmount — пиши пропало, утечка памяти обеспечена, привет, ебаный колхоз!

А теперь, внимание на хуй, смотри, как это делают современные пацаны на функциональных компонентах с хуками. Один useEffect заменяет всю эту трёхэтажную хуйню! Красота, ядрёна вошь!

function Example({ value }) {
  useEffect(() => {
    console.log('Монтирование/обновление');
    return () => console.log('Размонтирование');
  }, [value]); // Зависимости

  return <div>{value}</div>;
}

Всё, пиздец! Всё в одной функции! Захотел что-то сделать при монтировании и обновлении — написал в useEffect. Надо почистить за собой — вернул функцию. Надо следить только за value — кинул его в массив зависимостей. Нет зависимостей — эффект запустится один раз, как componentDidMount. Пустой массив возврата — будет как componentWillUnmount. Удобно, ёпта, до охуения!

Раньше-то, блядь, мозги выносило на разбор этих жизненных циклов. А теперь — чих-пых, и готово. Прогресс, сука, не остановить! Хотя, конечно, старикам-классам иногда ещё приходится в легаси-коде поковыриваться, так что помнить про них всё равно надо, как ни крути. Но факт остаётся фактом — функциональные компоненты с хуками это просто пизда, вот и всё.