В вашем конструкторе вы должны связать toggleComplete
при установке состояния
constructor(props) {
super(props);
this.state = {
todos: [
{ description: 'Walk the cat', isCompleted: true, isDeleted: false },
{ description: 'Throw the dishes away', isCompleted: false, isDeleted: false },
{ description: 'Buy new dishes', isCompleted: false, isDeleted: false }
],
newTodoDescription: '',
this.toggleComplete: this.toggleComplete.bind(this)
};
}
Также я думаю, что ваша логика может быть отключена для переключения задач.При настройке функции в вашем классе, возможно, сделайте что-то вроде этого.
toggleComplete(index) {
const { todos } = this.state;
const updatedTodos = todos.map((todo, idx) => {
if (idx === index) {
todo.isCompleted = !todo.isCompleted
}
}
this.setState({ todos: updatedTodos });
}
В вашем методе рендеринга
toggleComplete={this.toggleComplete}
index={index}
Похоже, вы передаете свою функцию toggleComplete
и фактически вызываетеэто на ToDo
компоненте, нет?Если это так, передайте свои index
и toggleComplete
в качестве реквизита, и тогда вы можете позвонить toggleComplete
на свой ToDo
компонент.Обязательно используйте функцию стрелки, например onClick={() => this.props.toggleComplete(index)}
, при ее установке, или она будет вызываться каждый раз, когда ваш компонент будет перерисован.