无法使用alt动作触发alt商店(Flux)

时间:2015-07-04 08:10:10

标签: javascript node.js reactjs flux

我正在开发一个goatslacker/alt的助焊剂前端程序。我有问题触发商店更新与行动。听众没有像我预期的那样发挥作用。

我正在处理的代码现在非常复杂。我将尝试将我的问题简化为以下代码。我希望它能记录下来#Hello World! msg:一些消息"到底。显然,听众hello()甚至没有跑。

这是要运行的主要javascript(ES6)文件:

import alt from './alt';

class DummyActionsProto {

  sayHello(msg) {
    console.log("sayHello", msg);
    return {msg}
  }

}
var DummyActions = alt.createActions(DummyActionsProto);

class DummyStoreProto {

  constructor() {
    this.bindListeners({
      hello: DummyActions.sayHello,
    });

    this.state = {
      items: [],
    };
  }

  hello(msg) {
    console.log("Hello World! msg: "+msg);
  }

}
var DummyStore = alt.createStore(DummyStoreProto, 'DummyStore');

// trigger the action
DummyActions.sayHello("Some message");

它包含的普通alt.js代码:

import Alt from 'alt';
module.exports = new Alt();

我的问题是什么?

1 个答案:

答案 0 :(得分:2)

简而言之,如果您在操作方法中添加this.dispatch(),商店只能捕获操作。因此,不应该返回该方法中的任何内容,而应运行this.dispatch()(带或不带参数)。侦听器将使用this.dispatch()

参数运行

更正后的版本:

import alt from './alt';

class DummyActionsProto {

  sayHello(msg) {
    console.log("sayHello", msg);
    this.dispatch(msg); // **instead of return, you should do this**
  }

}
var DummyActions = alt.createActions(DummyActionsProto);

class DummyStoreProto {

  constructor() {
    this.bindListeners({
      hello: DummyActions.sayHello,
    });

    this.state = {
      items: [],
    };
  }

  hello(msg) {
    console.log("Hello World! msg: "+msg);
  }

}
var DummyStore = alt.createStore(DummyStoreProto, 'DummyStore');

// trigger the action
DummyActions.sayHello("Some message");