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

Was this helpful?

  1. REACT HOOKS

Создание собственных хуков

Иногда нужно повторно использовать одинаковую логику состояния в нескольких компонентах. Решить эту задачу можно с помощью пользовательских хуков без добавления ненужных компонентов.

Например у нас есть логика для отображения статуса текущего пользователя (из примера выше), эту логику можно вынести в отдельный хук и использовать для отображения статуса друзей в сети:

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

  //делаем что-то для обновления статуса, например:
    API.login(props.id, handleStatusChange);
  });
  
  return isOnline;
}

Мы создали хук для управления статусом.

Как правило если имя функции начинается с ”use” и она вызывает другие хуки, это пользовательский хук.

Таким образом, теперь мы можем использовать этот хук:

function showMyStatus(props) {
  const isOnline = useUserStatus(props.id);
  
  return (
      <div> Status: {isOnline ? 'Online' : 'Offline'} </div>
  );
}
PreviousХук рефа (useRef)NextПравила использования хуков

Last updated 5 years ago

Was this helpful?