Здравствуйте, я изучаю React с прошлой недели, и я решил проблему, но я пытаюсь понять, почему она решила мою проблему.React event listener и remounting
Вот пример кода:
export default class ExampleComponent extends Component{
constructor(...arg){
super(...arg);
this.goToNextPage = this.goToNextPage.bind(this);
this.state = { currentPage: 1,
chapterImages: []};
}
goToNextPage(){
this.setState({
...this.state,
currentPage: R.inc(this.state.currentPage)
});
}
render(){
return (<button onClick={this.goToNextPage}>next</button>)
}
}
У меня есть то, что выглядит так. В моем реальном коде я делаю вызов Ajax, и это является причиной моего компонента монтирования и размонтирования ... Наконец, когда я нажимаю на мою кнопку, я получаю следующее сообщение об ошибке:
Warning: setState(...): Can only update a mounted or mounting component.
This usually means you called setState() on an unmounted component.
This is a no-op.
Но если я уронить эту строку из конструктора:
this.goToNextPage = this.goToNextPage.bind(this);
и изменить строку в методе визуализации с этим:
return (<button onClick={this.goToNextPage.bind(this)}>next</button>)
работы это прекрасно, но я не знаю, почему я получаю ошибку выше.
Я пошел по этому маршруту, потому что когда мой компонент размонтирован, он сохраняет ссылку связанного метода «goToNextPage» в прослушивателе кнопки.
Как решить эту проблему, сохранив привязку в конструкторе?
В чем причина размонтирования компонента? возможно, более верный пример кода жизни может оказаться полезным. Кстати, нет необходимости клонировать состояние при использовании 'setState()', только передавать ключи, требующие обновления. –
Вы как-то размонтируете этот компонент после вызова onClick, скорее всего, связанного с каким-то кодом вне самого компонента. Я вижу, что это кнопка, она в форме, которая отправляется по клику? –
Причина, по которой мой компонент отключен, заключается в том, что когда я делаю вызов ajax, я показываю значок загрузки на верхнем уровне древовидного компонента, и поэтому он отключает мой компонент, который находится на более низком уровне древовидной составляющей, я думаю это причина того, почему мой компонент отключен и перемонтирован. Спасибо за помощь ребята. –