Я подозреваю, что самые большие проблемы с возвратом значений. Например, это:
handleFilterTodo = filter => {
this.model.filterTodo(filter);
};
Этот код ничего не возвращает, он только вызывает this.model.filterTodo
. В соответствующем методе filterTodo
вы создаете новый массив с помощью this.todoS.filter
, но нигде не возвращаете его:
filterTodo(filter) {
this.todoS.filter(todo => {
if (filter === 0) return true;
return filter === 1 ? !todo.complete : todo.complete;
});
}
Вы можете сделать что-то похожее на то, что вы сделали с toggleTodo
и map
функция здесь:
filterTodo(filter) {
this.todoS = this.todoS.filter(todo => {
if (filter === 0) return true;
return filter === 1 ? !todo.complete : todo.complete;
});
}
... но это сработает только один раз, так как установка фильтра удалит другие задачи из вашей базы данных.
Из моего понимания кода (не пытаясь это сделать), я бы, вероятно, установил только фильтр, и всякий раз, когда вызывается _commit
, передайте отфильтрованную версию задач на основе выбранного фильтра
constructor() {
...
this.possibleFilters = {
0: () => true,
1: todo => !todo.completed,
2: todo => todo.completed
};
}
filterTodo(filter) {
this.filter = filter;
}
_commit(todoS) {
const selectedFilter = this.possibleFilters[this.filter];
this.onTodoListChanged(todoS.filter(selectedFilter));
}