【问题标题】:Store doesn't recognise my delete action from the dispatcher商店无法识别调度员的删除操作
【发布时间】:2019-08-04 16:46:05
【问题描述】:

我正在尝试为我的待办事项列表应用程序实现删除方法。我遇到了一个问题,它告诉我在 TodoStore.js 中“this.deleteTodo 不是函数”。我没有真正尝试过,因为我不知道问题出在哪里。这可能是什么问题?

我的 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;

我的 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,
  });
}

【问题讨论】:

    标签: javascript reactjs flux


    【解决方案1】:

    您已将createTodo 定义为TodoStore 类的方法,因此当通过this 访问时它可以工作,但您尚未将deleteTodo 方法定义为TodoStore 的成员类,所以 deleteTodo 方法不能通过调用 this 来访问,它引用了 TodoStore 类的一个实例。

    【讨论】:

    • 没什么区别。我看到我忘记在TodoStore.js 中声明一个删除方法deleteTodo。会不会是因为这个?
    • 没错,这些方法在类中不存在,它们是“TodoActions”模块中的独立函数,因此不需要this关键字来访问它们那么久当您从模块中导入它们时
    • 是的,但我在同一个类 (TodoStore) 中确实有一个 createTodo 方法,我用来创建一个方法,所以我在同一个类中使用一个方法,我是不从TodoActions.js导入它们
    • 是的,我刚刚看到...只是为了消除混淆,我不会将您的动作创建函数命名为与处理动作的类方法完全相同,匹配的名称让我很困惑分钟
    • 我会确保更改名称
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2023-03-25
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多