Вопрос основной описан в заголовке, но есть такие уточнения:
Использую 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()));
, нооо, как-то не правильно ИМХО