Привет, дорогие любители React! Вы когда-нибудь задумывались, как сделать ваши компоненты React более крутыми и динамичными? Что ж, вам повезло, потому что сегодня мы узнаем о хуках React!

Хуки React — это классная функция, которая позволяет вам использовать состояние и другие возможности React без написания класса. Они делают ваш код короче, чище и более пригодным для повторного использования. В этом руководстве мы сосредоточимся на двух самых популярных хуках: useState и useEffect.

useState — это хук, который позволяет сохранять значения между вызовами функций и похож на this.state в классе. Вы можете использовать его для отслеживания любых данных, таких как текст, числа, списки, объекты и т. д.

С другой стороны, useEffect позволяет вам делать что-то в функциональных компонентах и ​​может рассматриваться как сочетание componentDidMount, componentDidUpdate и componentWillUnmount в классе. Вы можете использовать его для получения данных из API, изменения названия документа, прослушивания событий и т. д.

Но почему вы должны использовать эти крючки? И когда вы должны их использовать? Ну, позвольте мне сказать вам!

Вы должны использовать useState, когда хотите хранить некоторые данные, которые со временем изменяются в вашем компоненте. А для useEffect вы должны использовать его, когда хотите что-то сделать после рендеринга или обновления вашего компонента.

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

Звучит отлично? Большой! Давайте рассмотрим несколько примеров и посмотрим, как использовать эти хуки в действии!

Пример useState: счетчик

Давайте начнем с простого примера использования useState для создания компонента-счетчика, который показывает количество кликов и имеет кнопку, чтобы увеличить его на единицу.

Во-первых, нам нужно импортировать хук useState из React:

import { useState } from "react";

Затем нам нужно создать переменную состояния и функцию для ее обновления внутри нашего компонента. Мы можем использовать синтаксис деструктурирующего присваивания, чтобы дать им имена. Нам также нужно передать начальное значение хуку useState, которое в данном случае равно 0:

function Counter() {
  const [count, setCount] = useState(0);
}

Затем нам нужно вернуть некоторый JSX, который отображает значение счетчика и элемент кнопки. Мы можем использовать фигурные скобки для вставки выражений JavaScript внутри JSX. Нам также нужно добавить обработчик onClick для кнопки, которая вызывает функцию setCount с новым значением:

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

Вот и все! Мы создали функциональный компонент, который использует состояние с помощью хука useState.

Довольно круто, правда? Но как это работает? Позволь мне объяснить!

Когда мы вызываем хук useState с начальным значением 0, он возвращает массив с двумя элементами: значением текущего состояния (count) и функцией для его обновления (setCount). Мы используем синтаксис деструктурирующего присваивания, чтобы присвоить им имена.

Затем мы возвращаем некоторый JSX, который отображает значение счетчика и элемент кнопки. Когда мы нажимаем кнопку, мы вызываем функцию setCount с новым значением (count + 1). Это обновляет переменную состояния и запускает повторную визуализацию компонента. В результате мы видим обновленное значение счетчика на экране.

Таким образом, мы можем хранить и обновлять любые данные в нашем компоненте, используя хук useState. Это как волшебство!

Пример useEffect: получение данных

Теперь давайте посмотрим, как использовать useEffect для получения некоторых данных из API и отображения их в нашем компоненте. В этом примере мы будем использовать API-интерфейс JSON Placeholder, который предоставляет некоторые поддельные данные для целей тестирования.

Во-первых, нам нужно импортировать хук useEffect из React вместе с хуком useState:

import { useState, useEffect } from "react";

Затем нам нужно создать переменную состояния и функцию для ее обновления для хранения данных, которые мы будем получать из API. Мы инициализируем его нулевым значением, поскольку у нас еще нет данных:

function Data() {
  const [data, setData] = useState(null);
}

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

function Data() {
  const [data, setData] = useState(null);

  useEffect(() => {
    // fetch data here
  }, []);
}

Внутри функции обратного вызова мы можем использовать fetch API или любую другую библиотеку, чтобы сделать HTTP-запрос к конечной точке API. Для простоты мы будем использовать здесь выборку. API выборки возвращает обещание, которое преобразуется в объект ответа. Нам нужно вызвать метод json() для объекта ответа, чтобы получить фактические данные в формате JSON. Затем нам нужно вызвать функцию setData с данными в качестве аргумента, чтобы обновить нашу переменную состояния:

function Data() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((response) => response.json())
      .then((data) => setData(data))
      .catch((error) => console.error(error));
  }, []);
}

Наконец, нам нужно вернуть некоторый JSX, который отображает данные в нашем компоненте. Мы можем использовать условный рендеринг, чтобы проверить, являются ли данные нулевыми или нет. Если он равен нулю, мы можем показать сообщение о загрузке. Если он не нулевой, мы можем сопоставить массив данных и отобразить каждый элемент в виде списка:

function Data() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((response) => response.json())
      .then((data) => setData(data))
      .catch((error) => console.error(error));
  }, []);
  return (
    <div>
      {data ? (
        <ul>
          {data.map((item) => (
            <li key={item.id}>
              {item.name} - {item.email}
            </li>
          ))}
        </ul>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

Вот и все! Поясню и это…

Когда мы вызываем хук useEffect с функцией обратного вызова и пустым массивом, он запускает функцию обратного вызова один раз после первоначального рендеринга. Внутри функции обратного вызова мы делаем запрос на выборку к API и получаем данные в формате JSON. Затем мы вызываем функцию setData с данными в качестве аргумента для обновления нашей переменной состояния. Это запускает повторную визуализацию компонента и отображает данные на экране.

Хук useEffect также очищается после размонтирования компонента. Это означает, что он отменяет все ожидающие запросы или подписки, которые больше не нужны. Это предотвращает утечки памяти и нежелательное поведение.

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

Заворачивать

В этом руководстве мы узнали, как использовать два важных хука React: useState и useEffect. Мы увидели, как использовать useState для создания и обновления переменных состояния в функциональных компонентах и ​​как использовать useEffect для выполнения действий после рендеринга или обновления нашего компонента. Мы также увидели, как использовать условный рендеринг и методы массива для отображения данных в наших компонентах.

Хуки React — это мощный и элегантный способ написания компонентов React. Они позволяют нам использовать состояние и другие возможности React без написания класса, а также делают наш код короче, чище и более пригодным для повторного использования. Существует множество других хуков, которые предоставляет React, например useRef, useMemo, useCallback и т. д. Подробнее о них можно узнать из официальной документации React.

Надеюсь, вам понравилось это руководство и вы узнали что-то новое. Если у вас есть какие-либо вопросы или отзывы, пожалуйста, дайте мне знать в комментариях ниже. Удачного кодирования!

Надеюсь, эта статья была вам полезна. Спасибо, что нашли время, чтобы прочитать его.



Если вас интересуют более подробные и технические статьи, подобные этой, обязательно подпишитесь на меня в Medium. А по всем вопросам, связанным со стартапами, бизнесом или веб-разработкой, обращайтесь ко мне в LinkedIn.

Готовы спроектировать и разработать собственный веб-сайт? Пожалуйста, не стесняйтесь обращаться ко мне! Я всегда здесь, чтобы ответить на ваши вопросы и помочь воплотить ваше видение в жизнь. Чтобы сохранить вдохновение, ознакомьтесь со статьями, которые я написал ниже. Давайте вместе продолжим расти и расширять наши знания!







Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .