[[A8R.ru]]
...
Главные концепции React

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

05.03.2025
React

Хуки в React: Полное руководство

Хуки в React были введены в версии 16.8 и стали неотъемлемой частью современного подхода к разработке. В этой статье мы рассмотрим основные хуки и их использование в React.

1. Структура проекта в React

Правильная организация проекта помогает избежать хаоса и упростить поддержку кода. Вот рекомендуемая структура React-проекта:


my-react-app/
│── public/           # Статические файлы (index.html, favicon, изображения)
│── src/              # Исходный код приложения
│   │── components/   # Переиспользуемые компоненты
│   │── pages/        # Страницы приложения
│   │── hooks/        # Кастомные хуки
│   │── context/      # Контекстное хранилище
│   │── services/     # API-запросы, утилиты
│   │── styles/       # Стили (если используете CSS/SCSS)
│   │── App.js        # Главный компонент
│   │── index.js      # Точка входа
│── package.json      # Зависимости и настройки проекта
│── .gitignore        # Файлы, игнорируемые Git
│── README.md         # Документация проекта
    

2. Компоненты (Components)

React основан на компонентах — это строительные блоки интерфейса. Компоненты бывают функциональные и классовые.

Функциональные компоненты (рекомендуемый подход)


function Greeting(props) {
  return <h1>Привет, {props.name}</h1>;
}
    

Классовые компоненты (устаревший подход)


class Greeting extends React.Component {
  render() {
    return <h1>Привет, {this.props.name}</h1>;
  }
}
    

3. JSX (JavaScript XML)

JSX — это расширение синтаксиса JavaScript, позволяющее писать HTML-подобный код в React.


const element = <h1>Привет, мир!</h1>;
    

JSX позволяет вставлять переменные и выражения в разметку:


const name = "Алексей";
const element = <h1>Привет, {name}</h1>;
    

4. Пропсы (Props)

Props — это способ передачи данных от родительского компонента к дочернему.


function UserProfile({ name, age }) {
  return <p>{name} — {age} лет</p>;
}
    

Использование:

<UserProfile name="Алексей" age={25} />

5. Состояние (State) и хук useState

Состояние (state) управляет данными внутри компонента.

Использование useState


import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>Счетчик: {count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}
    

6. Хуки (Hooks)

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

useState (управление состоянием)


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

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

useEffect (побочные эффекты)


useEffect(() => {
  console.log("Компонент смонтирован");
  return () => console.log("Компонент размонтирован");
}, []);
    

useEffect позволяет управлять побочными эффектами, такими как сетевые запросы, таймеры и манипуляции с DOM.

useContext (глобальное состояние)


const ThemeContext = React.createContext('light');
const theme = useContext(ThemeContext);
    

useContext позволяет получать данные из контекста React, предоставляя глобальное состояние для всего приложения или его частей.

useRef (ссылка на DOM-элемент)


const inputRef = useRef(null);
<input ref={inputRef} />
    

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

useReducer (альтернатива useState)


const [state, dispatch] = useReducer(reducer, initialState);
    

useReducer помогает управлять более сложными состояниями, например, в случаях с несколькими зависимыми состояниями.

useMemo (мемоизация значений)


const computedValue = useMemo(() => calculateValue(a, b), [a, b]);
    

useMemo помогает мемоизировать вычисления, чтобы избежать их повторного выполнения, если зависимости не изменились.

useCallback (мемоизация функций)


const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);
    

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

7. Обработка событий

React использует систему событий, похожую на обычные события DOM, но с особенностями. Пример:


function Button() {
  function handleClick() {
    alert("Кнопка нажата!");
  }
  return <button onClick={handleClick}>Нажми меня</button>;
}
    

8. React Router (Маршрутизация)

React Router используется для организации маршрутов и переходов между страницами приложения:


import { BrowserRouter, Route, Routes } from "react-router-dom";
import Home from "./Home";
import About from "./About";

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  );
}