Я создал проект в Reactjs, где у меня есть список имен, которые я хочу отобразить в пользовательском списке. Каждый элемент имеет кнопку для удаления элемента, однако всякий раз, когда я нажимаю кнопку, последний элемент удаляется из списка независимо от того, какой элемент списка я нажимаю.
Я уже пытался отлаживать свой код с помощью js-консоли, но это сделало проблему еще более странной, поскольку консоль отображает правильное состояние, когда компонент «Список» отображает элемент списка, которого больше нет в объекте состояния
import React, { Component } from 'react';
import './ListItem'
import ListItem from './ListItem';
class List extends Component {
constructor(props) {
super(props);
this.state = {
items: [
{name: 'Tobi'},
{name: 'Maxi'},
{name: 'David'},
{name: 'Peter'},
]
}
}
removeItem = (id) => {
let few = this.state.items;
few.splice(id,1);
//console.log(this.state.items);
this.setState({items: few}, function(){
console.log(this.state.items.map((item) => item.name));
this.forceUpdate();
});
}
render() {
return (
<div>
<ul>
{this.state.items.map((item, i) => <ListItem name={item.name} key={i} id={i} remove={this.removeItem}/>)}
</ul>
</div>
);
}
}
import React, { Component } from 'react';
class ListItem extends Component {
constructor(props) {
super(props);
this.state = {
name: this.props.name,
id: this.props.id
}
}
test = () => {
this.props.remove(this.state.id);
}
render() {
return (
<li>{this.state.name} <button onClick={() => this.test()}>click me</button></li>
);
}
}
export default ListItem;
Как уже говорилось, я ожидал, что нужный элемент списка будет удален, однако это всегда последний элемент, который больше не отображается, даже если объект состояния говорит иначе.