実現したいこと
ADDボタンを押すとTodoリストが追加されて、removeボタンを押すとそのTodoリストが削除されます。
iconをクリックするとis-activeクラスが着脱します。
- iconをクリックするまでは不具合が起こりません。
- 一度でもiconをクリックしてis-activeクラスを付与すると、期待とは異なる要素が削除されるようになってしまいました。消える要素の規則性はないように見えます
removeTodo = (index) => { const {todos} = this.state; this.setState({ todos: [...todos.slice(0, index), ...todos.slice(index + 1)] }); } render() { return( <> <div className="l-flex form"> <Form onChangeFunction={this.changeValue} value={this.state.value} /> <Btn text="ADD!" onClickFunction={this.addTodo} /> </div> <TodoList todos={this.state.todos} onClickFunction={this.removeTodo} /> </> ); }
const TodoList = (props) => { return( <ul className="list l-flex"> {props.todos.map((todo, index) => <List onClickFunction={props.onClickFunction} key={index} todo={todo} index={index} /> )} </ul> ); }
changeActive = () => { this.setState({ active: !this.state.active, }); } render() { return( <li className={"list-item l-flex" + (this.state.active ? " is-active" : "")} > <i onClick={this.changeActive} className={"far list-icon" + (this.state.active ? " fa-check-square" : " fa-square")}></i> <p>{this.props.todo}</p> <Btn text="remove!" onClickFunction={() => this.props.onClickFunction(this.props.index)} /> </li> ); }
調べてみたこと
this.props.indexの値をconsole.log()で見てみました。
例えばリストが三つあって更にADDボタンを押してリストを追加する→0,1,2,3と全ての値が一度ずつ呼ばれました。
こちらで試した限りでは問題なく動いてるように見えますけど…。
https://nakamura0907.github.io/react_todo/public/
リンクです。
5つほどTodoリストを追加して真ん中のリストにis-activeを付与してみてください。そしてis-activeを付与したリストを削除しようとして見てください。
全く異なるリストが削除されてしまいます…
回答1件
あなたの回答
tips
プレビュー