不能用alt动作触发alt存储(Flux)
我正在用goatslacker / alt开发stream量前端程序。 我有问题触发商店更新与行动。 听众不像我预料的那样运作。
我正在处理的代码现在非常复杂。 我会尽量简化我的问题到下面的代码。 我期待它最后login“Hello World!msg:Some message”。 显然,listener 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();
我的问题是什么?
简而言之,只有在action方法中添加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");