Skip to content
JavaScript.study

JavaScript.study

The Art of Programming

Безызвестных Денис, Denis Bezyzvestnykh, Дата-журналистика, Расследования, Аналитика, Интерактив, Данные, Сбор-данных, Опросы, Интервью, Большие-данные, Data-mining, Разработка-интерфейсов, UX-дизайн, Верстка, Frontend-разработка, Web-разработка, React, Vue, Data-journalism, Investigations, Analytics, Interactive, Data, Data-collection, Surveys, Interviews, Big-data, Data-mining, Senior-frontend, Expert, Master, Interface-development, UX-design, HTML, CSS, Frontend-development, Web-development

Улучшаем производительность — метод componentDidUpdate в React JS

Posted on 5 апреля, 202317 ноября, 2023 By Den Bezyzvestnykh
React JS, Продвинутый JavaScript, Фреймворки и библиотеки JavaScript, Фронтенд-разработка на JavaScript

Дорогие читатели, сегодня я хочу рассказать вам о методе componentDidUpdate в React. Если вы хотите быть уверенными в том, что ваш компонент отрисовывается правильно и обновляется только когда это необходимо, то эта тема для вас!

Представьте, что у вас есть компонент, который отображает список товаров. В какой-то момент вы решаете добавить фильтрацию по цене. Как только пользователь изменяет фильтр, вы хотите обновить список товаров на странице. Именно для таких ситуаций и существует метод componentDidUpdate.

Он вызывается после того, как компонент был обновлен и отрисован на странице. Это позволяет вам проверить новые свойства и состояние компонента и выполнить какие-то действия, если это необходимо.

Вот простой пример в классовом стиле:

import React, { Component } from 'react';

class Counter extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
  }

  componentDidUpdate(prevProps, prevState) {
    if (prevState.count !== this.state.count) {
      console.log('Count updated: ', this.state.count);
    }
  }

  incrementCount = () => {
    this.setState(prevState => ({ count: prevState.count + 1 }));
  };

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

export default Counter;

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

import React, { useState, useEffect } from 'react';

const Clock = () => {
  const [time, setTime] = useState(new Date());

  useEffect(() => {
    const timer = setInterval(() => {
      setTime(new Date());
    }, 1000);

    return () => clearInterval(timer);
  }, []);

  // componentDidUpdate - здесь это аналог
  // метода componentDidUpdate из примера выше
  useEffect(() => {
    console.log('Clock updated');
  }, [time]);

  return (
    <div>
      <h1>Current time: {time.toLocaleTimeString()}</h1>
    </div>
  );
};

export default Clock;

В данном примере мы используем хук useEffect для обновления времени каждую секунду. А в useEffect с зависимостью от time мы проверяем, изменилось ли время и выводим сообщение в консоль.

Надеюсь, этот пример показал вам, как можно использовать метод componentDidUpdate для обновления компонентов.

В заключение, если вы уже освоили основы React, рекомендую изучить метод componentDidUpdate, чтобы улучшить производительность и качество вашего кода. Но не забывайте, что для новичков это может быть слишком сложным, и вам не обязательно осваивать эту тему, если вы только начинаете.

Den Bezyzvestnykh

Материал подготовил Денис Безызвестных Опытный фулл стек разработчик с более чем 5 годами опыта в создании сайтов, приложений и сервисов. Имеет широкий спектр навыков, включающих в себя разработку на языках программирования JavaScript, TypeScript в том числе на платформе node.js Имеет опыт работы с различными фреймворками, такими как React, Vue, Express, Koa и др. Владеет навыками работы с базами данных MySQL, MongoDB, PostgreSQL, Neo4j и др.

Метки: Analytics Big-data component lifecycle componentDidUpdate CSS Data Data-collection Data-journalism Data-mining Denis Bezyzvestnykh Expert Frontend-development Frontend-разработка HTML Interactive Interface-development Interviews Investigations Master performance React React. Senior-frontend Surveys update UX-design UX-дизайн Vue Web-development web-разработка Аналитика Безызвестных Денис Большие-данные Верстка Данные Дата-журналистика жизненный цикл компонента Интерактив Интервью обновление Опросы производительность Разработка-интерфейсов Расследования Сбор-данных

Навигация по записям

❮ Previous Post: Оптимальное обновление — метод shouldComponentUpdate в React JS
Next Post: Webpack — упаковщик web-приложений ❯

You may also like

Безызвестных Денис, Denis Bezyzvestnykh, Дата-журналистика, Расследования, Аналитика, Интерактив, Данные, Сбор-данных, Опросы, Интервью, Большие-данные, Data-mining, Разработка-интерфейсов, UX-дизайн, Верстка, Frontend-разработка, Web-разработка, React, Vue, Data-journalism, Investigations, Analytics, Interactive, Data, Data-collection, Surveys, Interviews, Big-data, Data-mining, Senior-frontend, Expert, Master, Interface-development, UX-design, HTML, CSS, Frontend-development, Web-development
How to
Простой классовый компонент на React JS
4 апреля, 2023
Безызвестных Денис, Denis Bezyzvestnykh, Дата-журналистика, Расследования, Аналитика, Интерактив, Данные, Сбор-данных, Опросы, Интервью, Большие-данные, Data-mining, Разработка-интерфейсов, UX-дизайн, Верстка, Frontend-разработка, Web-разработка, React, Vue, Data-journalism, Investigations, Analytics, Interactive, Data, Data-collection, Surveys, Interviews, Big-data, Data-mining, Senior-frontend, Expert, Master, Interface-development, UX-design, HTML, CSS, Frontend-development, Web-development
How to
React JS — пишем первое приложение
4 апреля, 2023
Безызвестных Денис, Denis Bezyzvestnykh, Дата-журналистика, Расследования, Аналитика, Интерактив, Данные, Сбор-данных, Опросы, Интервью, Большие-данные, Data-mining, Разработка-интерфейсов, UX-дизайн, Верстка, Frontend-разработка, Web-разработка, React, Vue, Data-journalism, Investigations, Analytics, Interactive, Data, Data-collection, Surveys, Interviews, Big-data, Data-mining, Senior-frontend, Expert, Master, Interface-development, UX-design, HTML, CSS, Frontend-development, Web-development
React JS
Метод Render() в JSX (React)
5 апреля, 2023
Безызвестных Денис, Denis Bezyzvestnykh, Дата-журналистика, Расследования, Аналитика, Интерактив, Данные, Сбор-данных, Опросы, Интервью, Большие-данные, Data-mining, Разработка-интерфейсов, UX-дизайн, Верстка, Frontend-разработка, Web-разработка, React, Vue, Data-journalism, Investigations, Analytics, Interactive, Data, Data-collection, Surveys, Interviews, Big-data, Data-mining, Senior-frontend, Expert, Master, Interface-development, UX-design, HTML, CSS, Frontend-development, Web-development
How to
Ускоряем React и Vue-разработку с Vite
28 июня, 2023

Recent Posts

  • ECMA-262, 14-е издание, июнь 2023 г. Спецификация языка ECMAScript® 2023
  • Использование Class Components в ReactJS: Руководство с примерами
  • Ускоряем React и Vue-разработку с Vite
  • 8 важных практик в JavaScript для больших проектов
  • Нейросеть определяет жанр игры

Recent Comments

Нет комментариев для просмотра.

Copyright © 2023 JavaScript.study. Калининградская область, г. Калининград

Theme: Oceanly News by ScriptsTown