私は、リストから項目を削除する機能を除いて、正常に動作しているアプリを簡単に持っています。私はすでに各リスト項目にボタンを追加しています。 .filter()メソッドを使用して状態を渡すことがわかっていますが、これは削除されたToDoを持たない新しい配列ですが、このようなことをする方法がわかりません。ここでリストに反応すると、この削除ボタンはどのように機能しますか?
は、Appの主成分である:ここでは、その後
class App extends Component {
constructor(props){
super(props);
this.state = {
todos: [
{ description: 'Walk the cat', isCompleted: true },
{ description: 'Throw the dishes away', isCompleted: false },
{ description: 'Buy new dishes', isCompleted: false }
],
newTodoDescription: ''
};
}
deleteTodo(e) {
this.setState({ })
}
handleChange(e) {
this.setState({ newTodoDescription: e.target.value })
}
handleSubmit(e) {
e.preventDefault();
if (!this.state.newTodoDescription) { return }
const newTodo = { description: this.state.newTodoDescription,
isCompleted: false };
this.setState({ todos: [...this.state.todos, newTodo],
newTodoDescription: '' });
}
toggleComplete(index) {
const todos = this.state.todos.slice();
const todo = todos[index];
todo.isCompleted = todo.isCompleted ? false : true;
this.setState({ todos: todos });
}
render() {
return (
<div className="App">
<ul>
{ this.state.todos.map((todo, index) =>
<ToDo key={ index } description={ todo.description }
isCompleted={ todo.isCompleted } toggleComplete={() =>
this.toggleComplete(index) } />
)}
</ul>
<form onSubmit={ (e) => this.handleSubmit(e) }>
<input type="text" value={ this.state.newTodoDescription }
onChange={ (e) => this.handleChange(e) } />
<input type="submit" />
</form>
</div>
);
}
}
とのto-doのコンポーネントです:
class ToDo extends Component {
render() {
return (
<li>
<input type="checkbox" checked={ this.props.isCompleted }
onChange={ this.props.toggleComplete } />
<button>Destroy!</button>
<span>{ this.props.description }</span>
</li>
);
}
}
これは理にかなっているが、 const Todo =({description、id、isCompleted、toggleComplete、onDelete})=> – Db12797
@ Db12797私は 'ToDo'をステートレスコンポーネントとして書きました。あなたのバベル構成をチェックするか、あなたが書いたように「ToDo」を保つことができます。 'id'と' onDelete'の小道具を加えればいいはずです:) – mersocarlin