У меня есть класс React с функцией сортировки (List) и класс React для простого элемента (Elem). Если начата функция сортировки, она сортирует элементы в массиве в состоянии и перерисовывает список, но остается неизменной, хотя изменен массив в состоянии. Код:Реакция не перерисовывается
var Elem = React.createClass({
getInitialState() {
var elem_name = this.props.name;
return {
name: elem_name
}
},
render() {
return <div>{this.state.name}</div>;
}
});
var List = React.createClass({
getInitialState() {
return {
received: false,
arr: null
}
},
receiving() {
this.setState({
received: true,
arr: [1, 2, 3, 4, 5]
});
},
sorting(type) {
var self = this;
return function() {
function sort_func() {
//sorting...
}
var main_arr = self.state.arr;
main_arr.sort(sort_func);
self.setState({
arr: main_arr
})
}
},
render() {
if(this.state.received) {
var all_elems = [];
this.state.arr.forEach(function(elem) {
all_elems.push(<Elem name={elem}>);
});
return <div>
<button onClick={this.sorting}>Sort</button>
{all_elem}
</div>
}
else {
this.receiving();
return <div>Empty</div>;
}
}
});
Например, массив после сортировки - [5, 4, 3, 2, 1]. На первой странице HTML есть
<div>1</div><div>2</div>...<div>5</div>;
Но после сортировки HTML-страницы не изменилось, хотя изменен массив в состоянии.
Дайте элементы уникальный 'key' свойство. Избегайте копирования утверждения в состояние, если вам не нужно его изменять ('props.name' =>' state.name') –
Похоже, вы используете __ES6__! Пожалуйста, используйте [функции стрелок] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) вместо 'self = this'. – Mathletics