class ToDo extends React.Component {
constructor() {
super()
this.state = {
todos: [],
inputValue: null
}
this.changeValue = this.changeValue.bind(this)
this.addTodo = this.addTodo.bind(this)
this.removeTodo = this.removeTodo.bind(this)
}
changeValue(e) {
this.setState({inputValue: e.target.value})
}
addTodo(e) {
e.preventDefault()
const newTodoItem = {
id: Date.now(),
inputValue: this.state.inputValue
}
if(!this.state.inputValue.length) return
this.setState(state => ({
todos: state.todos.concat(newTodoItem),
inputValue: ''
}))
}
removeTodo(e) {
const et = e.target
const todos = this.state.todos
this.setState({
todos: todos.splice(todos.indexOf(et), 1)
})
}
render() {
return(
<div>
<form onSubmit={this.addTodo}>
<input
type='text'
name='todo'
placeholder='Enter a ToDo'
value={this.state.inputValue}
onChange={this.changeValue}
/>
<input type='submit' value='Add' />
<span>ToDos: {this.state.todos.length}</span>
</form>
<TodoList items={this.state.todos} itemClickEvent={this.removeTodo} />
</div>
)
}
}
class TodoList extends React.Component {
render() {
const items = this.props.items
return(
<ul>
{
items.map(item => (
<li key={item.id} onClick={this.props.itemClickEvent}>{item.inputValue}</li>
))
}
</ul>
)
}
}
ReactDOM.render(<ToDo />, document.querySelector('#app'))
In dieser ToDo-Liste Probe, die ich gerade von der Probe in der Homepage reactjs.org imitiert, fügte ich ein Ereignis, das die gezielte todo Element entfernt, wenn geklickt. Das Problem ist, egal, welche der Aufgaben, auf die ich klicke, statt das Zielobjekt selbst zu entfernen, es entfernt alle Elemente mit Ausnahme des letzten Elements. Warum ist ein solcher Fehler passiert?onClick Ereignis nur verlässt das letzte Element des DOM-Array statt das Ziel der Beseitigung
können Sie console.log todos.indexOf (et) auf removeTodo? –
es protokolliert '-1' für jeden Artikel – juntarnate16