Предотвратить повторный рендеринг ReactJS при использовании setInterval()

Привет ребята ? Итак, я сейчас разрабатываю веб с помощью React, и мне нужно сделать секундомер, который будет воспроизводиться, когда я нажимаю кнопку, поэтому я использую метод setInterval(). Но когда я нажимаю кнопку и выполняется setInterval(), я получаю это предупреждение от библиотеки почему-вы-обновили, что означает избегать повторного рендеринга. Я уже использую PureComponent, но почему, когда setInterval() работает, какой-то компонент все еще перерисовывается? это заставляет парней отставать, и если я остановлю setInterval с помощью метода clearInterval(), компонент прекратит повторный рендеринг.

Предотвратить повторный рендеринг ReactJS при использовании setInterval()

Код примерно такой:

startTimer() {
  // Test
  this.setState(
    prevState => ({
      ...prevState,
      isSessionStarted: true,
      duration: prevState.duration,
      startedAt: Date.now() - prevState.duration
    }),
    () => {
      this.timer = setInterval(
        () =>
          this.setState(prevState => ({
            duration: Date.now() - prevState.startedAt
          })),
        1000
      );
    }
  );
}

stopTimer() {
  this.setState({ isSessionFinished: true }, () => {
    clearInterval(this.timer);
  });
}

Любое решение? Спасибо раньше.

От реактивная документация: setState() will always lead to a re-render unless shouldComponentUpdate() returns false. If mutable objects are being used and conditional rendering logic cannot be implemented in shouldComponentUpdate(), calling setState() only when the new state differs from the previous state will avoid unnecessary re-renders.

nubinub 22.01.2019 10:23

Вы также можете поделиться своей функцией рендеринга?

apokryfos 22.01.2019 10:25

Предполагая, что _getDuration вернет то, что находится в state.duration, затем повторный рендеринг на каждом тике является необходимым

apokryfos 22.01.2019 10:37

@apokryfos хм, но он все еще перерисовывается, хотя я удаляю метод _getDuration

masdap 22.01.2019 11:01

Он будет перерисовываться каждый раз, когда вы вызываете setState, как упоминал @nubinub. Однако я говорю, что то, как вы построили свой компонент, кажется вашим намерением.

apokryfos 22.01.2019 11:04

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

duc mai 22.01.2019 23:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
1 073
0

Другие вопросы по теме