我正在使用 goatslacker/alt 开发一个 flux 前端程序.我在触发商店更新操作时遇到问题。监听器未按预期运行。
我现在正在处理的代码非常复杂。我将尝试将我的问题简化为以下代码。我希望它最后记录“Hello World! msg: Some message”。显然,监听器 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();
我的问题是什么?
最佳答案
简而言之,只有在操作方法中添加 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");
关于javascript - 无法使用 alt 操作触发 alt 存储 (Flux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31218487/