TGViewer
Frontend | Вопросы собесов Frontend | Вопросы собесов @easy_javascript_ru · 17.6K subscribers
Post #564 6.07K
📌 Какой классовый компонент не нужен при использовании хуков?

💬 Спрашивают в 3% собеседований

С появлением хуков (hooks) в React стало возможным использовать функциональные компоненты вместо классовых для выполнения задач, которые ранее могли быть реализованы только в классовых компонентах. Благодаря хукам, большинство классовых компонентов могут быть заменены функциональными компонентами. Рассмотрим, какие классовые компоненты становятся ненужными при использовании хуков и как они могут быть преобразованы.

🤔 Основные хуки, заменяющие классовые компоненты

1️⃣ useState:

➕ Позволяет использовать состояние в функциональных компонентах.

Классовый компонент:
   class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}

increment = () => {
this.setState({ count: this.state.count + 1 });
};

render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={this.increment}>Increment</button>
</div>
);
}
}


Функциональный компонент с `useState`:
   import React, { useState } from 'react';

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

return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}


2️⃣ useEffect:

➕ Замена методов жизненного цикла, таких как componentDidMount, componentDidUpdate и componentWillUnmount.

Классовый компонент:
   class DataFetcher extends React.Component {
constructor(props) {
super(props);
this.state = { data: null };
}

componentDidMount() {
fetchData().then(data => {
this.setState({ data });
});
}

render() {
return <div>Data: {this.state.data}</div>;
}
}


Функциональный компонент с `useEffect`:
   import React, { useState, useEffect } from 'react';

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

useEffect(() => {
fetchData().then(data => {
setData(data);
});
}, []); // Пустой массив означает, что эффект выполняется только при монтировании

return <div>Data: {data}</div>;
}


3️⃣ useContext:

➕ Позволяет использовать контекст в функциональных компонентах, заменяя необходимость использования contextType или Context.Consumer.

Классовый компонент:
   const MyContext = React.createContext();

class MyComponent extends React.Component {
render() {
return (
<MyContext.Consumer>
{value => <div>{value}</div>}
</MyContext.Consumer>
);
}
}


Функциональный компонент с `useContext`:
   import React, { useContext } from 'react';

const MyContext = React.createContext();

function MyComponent() {
const value = useContext(MyContext);
return <div>{value}</div>;
}


🤔 Примеры других хуков:

➕ useReducer: Альтернатива useState для сложных состояний и логики обновления.

➕ useMemo: Мемоизация значений для оптимизации производительности.

➕ useCallback: Мемоизация функций для оптимизации производительности.

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

🤔 Заключение

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

Коротко: Благодаря хукам, такие как useState, useEffect и useContext, большинство классовых компонентов в React могут быть заменены функциональными компонентами, что упрощает и улучшает код.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
  • 👍 24
  • 🤔 3
  • ❤ 1
More from @easy_javascript_ru
  1. Oct 16, 2026🤔 Что такое meta теги? Meta-теги – это специальные HTML-теги, которые содержат метаинформ…
  2. Oct 15, 2026Post #3044
  3. Oct 15, 2026🤔 Какие преимущества у di? Dependency Injection (DI) – это паттерн проектирования, которы…
  4. Oct 14, 2026🤔 Зачем создавались библиотеки react и другие? Библиотеки, такие как React, создавались д…
  5. Oct 13, 2026🤔 Что такое репозиторий? Это хранилище кода, файлов и их истории изменений. Используется…
  6. Oct 13, 2026🤔 Как мы можем замерить скорость работы участка кода с date.Now? В JavaScript можно замер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →