React+hooks+Redux
  • Вступление
  • REACT HOOKS
    • Введение в хуки
    • Основные хуки
      • Хук состояния (useState)
      • Хук эффекта (useEffect)
      • Хук колбека (useCallback)
      • Хук рефа (useRef)
    • Создание собственных хуков
    • Правила использования хуков
    • Полезная информация
      • Хук мемоизированного значения (useMemo)
      • Как закешировать вычисления?
      • Как получить предыдущие пропсы или состояние?
      • Как осуществлять запросы за данными с помощью хуков?
    • Задание React Hooks
  • REDUX
    • Что такое Redux
    • Основы
      • Действия (Actions)
      • Генераторы действий (Action Creators)
      • Редюсеры (Reducers)
      • Хранилище (Store)
      • Получение доступа к actions и state с помощью функции connect()
      • Подключение Redux
    • Что дальше?
      • Асинхронные действия (Async Actions)
      • Использование Redux с React Router
    • Задание Redux
  • FAQ
    • Заключение
Powered by GitBook
On this page
  • useEffect как componentDidUpdate
  • useEffect как componentDidMount
  • useEffect как componentWillUnmount

Was this helpful?

  1. REACT HOOKS
  2. Основные хуки

Хук эффекта (useEffect)

будет гарно если человек увидит все варианты жизненных циклов с помощью этого хука - це Дима

useEffect - выполняет ту же роль, что и componentDidMount, componentDidUpdate и componentWillUnmount в React-классах, но объединяет их в единый API.

useEffect как componentDidUpdate

function showMyStatus(props) {
  const [isOnline, setIsOnline] = useState(false);
  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    //делаем что-то для обновления статуса, например:
    API.login(props.id, handleStatusChange);
  });
  
  return (
      <div> Status: {isOnline ? 'Online' : 'Offline'} </div>
  );
}

Что же делает useEffect? Используя этот хук, мы говорим React сделать что-то после рендера. React запомнит функцию (эффект) и вызовет её после того, как внесёт все изменения в DOM.

Если необходимо чтобы React пропускал вызов эффекта, если определённые значения остались без изменений между последующими рендерами, передайте массив в useEffect вторым необязательным аргументом так:

useEffect(() => {
  document.title = `Вы нажали ${count} раз`;
}, [count]); // Перезапускать эффект только если count поменялся

Рассмотрим варианты использования хука эффекта более подробно.

useEffect как componentDidMount

componentDidMount() вызывается один раз, сразу после монтирования компонента. Инициализация, требующая доступа к узлам DOM, должна находиться здесь. Если вам нужно загружать данные с удаленного источника, это хорошее место для инициирования сетевого запроса.

Чтобы реализовать метод componentDidMount() с помощью useEffect, достаточно передать в пустой массив вторым аргументом в useEffect.

function counter(props) {
  const [state, setState] = useState(0);
  useEffect(() => {
    setState(0);
  }, []);
  
  return (
      <div> Count: {state} </div>
  );
}

Таким образом useEffect вызывается один раз, сразу после монтирования компонента.

useEffect как componentWillUnmount

сomponentWillUnmount() вызывается непосредственно перед демонтированием и уничтожением компонента.

Чтобы повторить сomponentWillUnmount() , необходимо возвращать в useEffect функцию очистки:

  ...
  
  useEffect(() => {
    document.addEventListener('mousedown', handleClick, false);
    
    return () => {
      document.removeEventListener('mousedown', handleClick, false);
    };
  }, []);
  
  ...
PreviousХук состояния (useState)NextХук колбека (useCallback)

Last updated 5 years ago

Was this helpful?