Я хочу добавить в свой проект бесконечную прокрутку, но столкнулся с проблемой. Я получаю ошибку в консоли, что мое состояние обновляется очень часто. Я использую плагин: React Infinite Scroller. Если я правильно понимаю, при открытии страницы должна отображаться одна страница и запрашиваться функция gen_div, но возникает ошибка. Спасибо!
MyComponent {
constructor(props) {
super(props);
this.state = {div_list: []}
}
gen_div() {
var new_list = this.state.div_list;
new_list.push(<div>1</div>);
new_list.push(<div>2</div>);
new_list.push(<div>3</div>);
this.setState({div_list: new_list})
}
render() {
return(
<InfiniteScroll
pageStart = {1}
loadMore = {this.gen_div}
hasMore = {true}
loader=(<h4>Loading..</h4>)
>
{this.state.div_list}
</InfiniteScroll>
)
}
}
Кстати, вы мутируете состояние. var new_list = this.state.div_list создает ссылку на массив состояний, а затем .push() изменяет массив состояний. Мутантное состояние в React - большой запрет. Сделайте копию массивов состояний / объектов, которые вы хотите изменить: var new_list = this.state.div_list.slice();. Также обратите внимание на оператор распространения, который позволяет быстро и легко копировать массивы / объекты.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать setState с обратным вызовом.
gen_div = () => {
this.setState(prevState => {
let new_list = prevState.div_list;
new_list.push(<div>1</div>);
new_list.push(<div>2</div>);
new_list.push(<div>3</div>);
return({{...prevState}, {div_list: new_list}});
}
}
Есть много вещей, которые могут быть проблемой. Например, привязка this в приведенном выше примере выглядит неверной. Не могли бы вы отредактировать, чтобы сообщить точную ошибку?