У меня сложное приложение, и оно дает мне следующее предупреждение:
Предупреждение: setState (...): невозможно обновить во время существующего перехода состояния (например, в
render
или в конструкторе другого компонента). Методы рендеринга должны полностью зависеть от свойств и состояния; побочные эффекты конструктора - это анти-шаблон, но их можно переместить вcomponentWillMount
.
В двух словах это предупреждение появляется, когда я нажимаю кнопку «добавить», которая должна добавить еще один компонент в мое приложение. Вот соответствующий фрагмент кода:
<Button onClick={addChartHandler.bind(this)}><Glyphicon glyph="plus" /></Button>
addChartHandler
происходит из его компонента-контейнера:
addChartHandler() {
store.dispatch(addChart());
}
addChart просто увеличивает счетчик компонентов. И контейнер приложения подписывается на эти изменения:
const mapStateToProps = (store) => {
return {
count: store.app.chartsCount
};
}
Мне сложно отследить предупреждение, но я звонил console.log
каждый раз при рендеринге каждого компонента. Похоже, что это предупреждение появляется после рендеринга этого компонента (который является тупым компонентом для моего App
):
render() {
let charts = [];
for (let i = 0; i < this.props.count; i++) {
charts.push(<ChartContainer id={i} key={i} size={this.props.size} />);
}
console.log('APP RENDER');
console.log(charts);
return (
<div className="container-padding">
<NavContainer />
{charts}
</div>
);
}
Любые предложения приветствуются. Работал над этим не менее трех часов, идеи кончились.