Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一个简单的测试程序中强制启动回流动作?_Javascript_Reactjs_Refluxjs - Fatal编程技术网

Javascript 如何在一个简单的测试程序中强制启动回流动作?

Javascript 如何在一个简单的测试程序中强制启动回流动作?,javascript,reactjs,refluxjs,Javascript,Reactjs,Refluxjs,我试图了解回流操作和存储是如何工作的,所以我写了一个小测试程序。当我运行应用程序时,调用 toggleGem(); 这会导致回流动作触发,但不会立即运行。这些操作事件排队,如下面程序的输出所示 输出为: myObj=lastUpdate=undefined myObj=lastUpdate=undefined myObj=lastUpdate=undefined ENTER: gemStore.handleToggleGem: isGemActivated:false MyObj.onGemC

我试图了解回流操作和存储是如何工作的,所以我写了一个小测试程序。当我运行应用程序时,调用

toggleGem();
这会导致回流动作触发,但不会立即运行。这些操作事件排队,如下面程序的输出所示

输出为:

myObj=lastUpdate=undefined
myObj=lastUpdate=undefined
myObj=lastUpdate=undefined
ENTER: gemStore.handleToggleGem: isGemActivated:false
MyObj.onGemChange: newVal=true
EXIT:  gemStore.handleToggleGem: isGemActivated:true
ENTER: gemStore.handleToggleGem: isGemActivated:true
MyObj.onGemChange: newVal=false
EXIT:  gemStore.handleToggleGem: isGemActivated:false
请注意,控制台输出

ENTER: gemStore.handleToggleGem: isGemActivated:false
直到程序退出才显示。对我来说,这意味着动作事件被捆绑,并在稍后由某个正在进行的内务处理触发/运行

是否有一个函数可以调用,以通知Reflection触发已排队的操作事件

要重新创建此示例,只需将代码保存到RefluxTest.js并运行以下命令:

mkdir RefluxTest
npm init
npm install --save reflux
npm install --save react
node RefluxTest.js
谢谢

注意:我知道这并不代表回流通常的使用方式,因为它在浏览器之外,但我很好奇是否有人有答案

基于源代码


我开始调试并进入回流代码,第一个语句检查是否设置了sync标志,所以我尝试设置它,结果成功了

因此,通过更改代码添加toggleGem.sync=true,如下所示

// Creating action
var toggleGem = Reflux.createAction();
toggleGem.sync = true;                 // THIS LINE WAS ADDED
示例程序按预期工作

注意:在修复了最初提出的同步问题之后,我还注意到了一个与此Javascript相关的bug/问题。以下是所需的额外更改:

function MyObj() {
    gemStore.listen(this.onGemChange, this);
    this.lastUpdate = undefined;
}

如果没有在gemStore.listen调用中传递此消息,则代码将无法正常工作。

注意:我创建了一个基于浏览器的此程序示例,并且出现了相同的行为。直到逻辑主节点退出,才会调用RefluxAction。在浏览器中,这意味着Main.jsx调用React.render、document.getElementByIdapp,javascript文件完成后,再调用ReactActions。
function MyObj() {
    gemStore.listen(this.onGemChange, this);
    this.lastUpdate = undefined;
}