Legendarniy
@Legendarniy

Ререндер PureComponent, произойдет ли?

Вопрос основной описан в заголовке, но есть такие уточнения:
Использую React { PureComponent }, MobX, SSR.

В приложении есть кнопка "Обновить", которая запускает принудительный запрос с целью получить актуальные данные. Далее нужно, чтобы после того как произошло обновление данных, компонент перерендерился, для этого у меня есть следущие инструменты:
Декоратор fetchState
@fetchState(
  state => ({ data: state.data }),
  actions => ({ done: actions.done }),
)


Далее и инжектирую мой стор, делаю компонент @observer и в самом компоненте делаю следущее
componentWillMount() {
    if (!this.props.data) {
      this.store.load().then((data) => {
        this.props.done({ data });
      }, (error) => {
        console.error('Products not loaded', error);
        this.props.done({});
      });
    } else {
      this.store.load(this.props.data);
    }
  }

  componentDidMount() {
    this.disposer = reaction(() => subscription.updateInfo, () => this.store.load());
  }

  componentWillUnmount() {
    if (typeof this.disposer === 'function') this.disposer();
  }


Вот эта часть кода
this.disposer = reaction(() => subscription.updateInfo, () => this.store.load());
говорит о том, что если произошли изменения в updateInfo, то тогда я заново загружаю store. В ответе от этого стора я получаю инфу, но она прежняя. И ререндера нет. Пробовал делать компонент и обычным наследованием от Component, ререндера тоже нет. this.store.load() вызывается, проверял. Уже было решил, что всё перерендерится при получении обновленной даты, но появились сомнения) Кто, что скажет?

UPD: можно конечно сделать так
this.disposer = reaction(() => subscription.updateInfo, () => this.store.load().then(() => this.forceUpdate()));
, нооо, как-то не правильно ИМХО
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
19 авг. 2018, в 17:22
1000 руб./в час
19 авг. 2018, в 17:11
200000 руб./за проект
19 авг. 2018, в 12:12
40000 руб./в месяц