Магазин не распознает мое действие удаления от диспетчера - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь реализовать метод удаления для моего приложения списка задач. Я столкнулся с проблемой, когда мне сообщают, что «this.deleteTodo не является функцией» в TodoStore.js. Я не особо старался, потому что не знаю, откуда возникла проблема. В чем может быть проблема здесь?

My TodoStore.js

import { EventEmitter } from "events";

import dispatcher from "../dispatcher";

class TodoStore extends EventEmitter {
  constructor() {
    super()
    this.todos = [
      {
        id: 113464613,
        text: "Go Shopping"
      },
      {
        id: 235684679,
        text: "Pay Water Bill"
      },
    ];
  }

  createTodo(text) {
    const id = Date.now();

    this.todos.push({
      id,
      text,
    });

    this.emit("change");
  }

  getAll() {
    return this.todos;
  }

  handleActions(action) {
    switch(action.type) {
      case "CREATE_TODO": {
        this.createTodo(action.text);
        break;
      }
      case "DELETE_TODO": {
        this.deleteTodo(action.id);
        break;
      }
    }
  }

}

const todoStore = new TodoStore;
dispatcher.register(todoStore.handleActions.bind(todoStore));
window.dispatcher = dispatcher
export default todoStore;

My TodoActions.js

import dispatcher from "../dispatcher";

export function createTodo(text) {
  dispatcher.dispatch({
    type: "CREATE_TODO",
    text,
  });
}

export function deleteTodo(id) {
  dispatcher.dispatch({
    type: "DELETE_TODO",
    id,
  });
}

1 Ответ

0 голосов
/ 14 марта 2019

Вы определили createTodo как метод класса TodoStore, поэтому он будет работать при доступе через this, но вы не определили метод deleteTodo как член TodoStoreкласс, поэтому метод deleteTodo не будет доступен при вызове this, который ссылается на экземпляр класса TodoStore.

...