TGViewer
Frontend | Вопросы собесов Frontend | Вопросы собесов @easy_javascript_ru · 17.6K subscribers
Post #567 6.23K
📌 Что не стоит писать в рендере?

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

В методе render (или в теле функционального компонента) в React не следует писать код, который выполняет побочные эффекты или вызывает ресурсоёмкие операции. Метод render должен быть чистым и идемпотентным, что означает, что его выполнение не должно изменять состояние компонента или вызывать другие побочные эффекты. Вот несколько примеров того, чего следует избегать в методе render:

1️⃣ Выполнение побочных эффектов

Побочные эффекты включают операции, которые изменяют состояние, делают запросы к серверу, подписываются на события или манипулируют DOM напрямую. Для этих целей следует использовать хуки, такие как useEffect, или методы жизненного цикла классовых компонентов, такие как componentDidMount и componentDidUpdate.

🤔 Что не делать:
class MyComponent extends React.Component {
render() {
// Не делайте запросы в render
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.setState({ data });
});

return <div>Rendering...</div>;
}
}


🤔 Правильный подход:
class MyComponent extends React.Component {
componentDidMount() {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.setState({ data });
});
}

render() {
return <div>Rendering...</div>;
}
}


2️⃣ Изменение состояния (setState)

Изменение состояния компонента внутри метода render приведет к бесконечному циклу рендеринга.

🤔 Что не делать:
class MyComponent extends React.Component {
render() {
// Не вызывайте setState в render
this.setState({ someState: 'newValue' });

return <div>Rendering...</div>;
}
}


🤔 Правильный подход:
class MyComponent extends React.Component {
someMethod() {
this.setState({ someState: 'newValue' });
}

render() {
return <div onClick={() => this.someMethod()}>Rendering...</div>;
}
}


3️⃣ Выполнение дорогостоящих вычислений

Метод render должен быть быстрым и легким, чтобы поддерживать высокую производительность. Дорогостоящие вычисления могут замедлить рендеринг.

🤔 Что не делать:
class MyComponent extends React.Component {
render() {
// Избегайте долгих вычислений в render
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}

return <div>Result: {result}</div>;
}
}


🤔 Правильный подход:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { result: this.expensiveCalculation() };
}

expensiveCalculation() {
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
return result;
}

render() {
return <div>Result: {this.state.result}</div>;
}
}


4️⃣ Прямое манипулирование DOM
React управляет DOM за вас, поэтому вам не нужно и не следует манипулировать DOM напрямую в методе render. Вместо этого используйте состояние и пропсы для управления рендерингом.

🤔 Что не делать:
class MyComponent extends React.Component {
render() {
// Не манипулируйте DOM напрямую в render
document.getElementById('some-id').textContent = 'New Text';

return <div>Rendering...</div>;
}
}


🤔 Правильный подход:
class MyComponent extends React.Component {
render() {
return <div id="some-id">New Text</div>;
}
}


🤔 Заключение

Метод render должен быть чистым и идемпотентным. Это означает, что он должен только возвращать JSX для рендеринга и не выполнять побочные эффекты, такие как изменения состояния, запросы к серверу, дорогостоящие вычисления или манипуляции с DOM. Для этих целей следует использовать хуки (например, useEffect) или методы жизненного цикла классовых компонентов.

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

🔒 База собесов | 🔒 База тестовых
  • ❤ 11
  • 👍 7
  • 🤔 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 →