未捕获的TypeError:TodoActions.createTodo不是Todos.createTodo中的函数

时间:2018-01-06 11:45:44

标签: javascript reactjs flux

我在标题中发布了错误。我试图将一些代码放入通量模式,所以我有:

  1. 代表行动的TodoActions文件
  2. 代表视图的Todos文件
  3. 我还有Dispatcher文件和商店文件,但我认为问题没有触及 它们。
  4. 单击Todos.js中的按钮时,它会调用Todos.js中的createTodo()函数并执行

    • TodoActions.createTodo( 'X');

    发生错误 - > TodoActions.createTodo不是Todos.createTodo的函数

    Todos.js

    import React from "react";
    import Todo from "../components/Todo";
    import TodoStore from "../stores/TodoStore";
    import * as TodoActions from "../actions/TodoActions";
    
    export default class Todos extends React.Component {
      constructor() {
        super();
        this.state = {
          todos: TodoStore.getAll(),
        };
      }
    
      componentWillMount() {
        TodoStore.on("change", () =>{
          this.setState({
            todos: TodoStore.getAll(),
          });
        });
      }
    
      createTodo(){
        TodoActions.createTodo('x');
      }
    
    render() {
        const { todos } = this.state;
    const TodoComponents = todos.map((todo) => {
        return <Todo key={todo.id} {...todo}/>;
    });
    
    return (
      <div>
      <button onClick={this.createTodo.bind(this)}>Create!</button>
        <h1>Todos</h1>
        <ul>{TodoComponents}</ul>
      </div>
    );
      }
    }
    

    TodoActions.js

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

    project structure

    提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为文件 TodoActions 是导入而不是 TodoActions.js ,所以如果您不需要它或将其重命名,请将其删除,以便< strong> TodoActions.js &#39;将被导入。