我正在开发一个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();
我的问题是什么?
答案 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");