ClearInterval не работает в componentWillUnmount

Мое приложение для реагирования извлекает api и setInterval в componentDidMount и удаляет его в componentWillUnmount, но каким-то образом, даже когда компонент больше не монтируется (например, когда пользователь выходит из системы и перенаправляется на страницу входа), он все еще периодически выполняет fetch api, как его отлаживать?

(1) получить код API

fetchApi = async pathname => {
const URL = 'API URL'
try {
  const { data } = await axios.get(URL, { withCredentials: true });
  const { updateTime, results } = data;
  const sortedResults = _.sortBy(results, "wo_start").reverse();

  // fetching user data from sessionStorage
  const user = JSON.parse(sessionStorage.getItem("user"));
  if (!user) {
    return this.setState({
      redirectToLogin: true
    });
  }
  return this.setState({
    orders: sortedResults,
    renderedOrders: sortedResults,
    updateTime: updateTime.time,
    pathname,
    user
  });
} catch (e) {
  console.error("Credentials Failed");
  return this.setState({
    redirectToLogin: true
  });
}};

(2) componentDidMount

componentDidMount() {
const { pathname } = this.props.history.location;
this.fetchApi(pathname)
  .then(() => {
    const intervalId = setInterval(
      () => this.fetchApi(pathname),
      2 * 60 * 1000
    );
    this.setState({
      intervalId: intervalId
    })
  })
  .catch(e => console.error(e));
  }

(3) componentWillUnmount

 componentWillUnmount() {
// clearing set interval
clearInterval(this.state.intervalId);
};

(4) вот изображение с консоли Chrome после выхода из системы ClearInterval не работает в componentWillUnmount

Я бы начал с console.info вокруг componentWillUnmount, этот блок работает, как ожидалось?

CertainPerformance 29.11.2018 07:55

да, возможно, componentWillUnmount даже не работает. Попробуйте зарегистрировать или установить точку останова, значение this.state.intervalId тоже

Gaurav 29.11.2018 08:01
Поведение ключевого слова "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) для оценки ваших знаний,...
0
2
907
1

Ответы 1

setState () является асинхронным.

измените свой код:

(2) componentDidMount

 ...
 ...
  this.fetchApi(pathname)
  .then(() => {
    const intervalId = setInterval(
    () => this.fetchApi(pathname),
    2 * 60 * 1000
  );
  this.intervalId= intervalId
...
...

(3) componentWillUnmount

componentWillUnmount() {
  // clearing set interval
  clearInterval(this.intervalId);
};
setState () является асинхронным - это обещание. Очень маловероятно, что setState вызывает состояние гонки.
Estus Flask 29.11.2018 08:29

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