Я пытаюсь узнать, как работают действия и магазины Reflux, поэтому я написал небольшую тестовую программу. Когда я запускаю приложение, код, который вызываетКак я могу принудительно активировать действия рефлюкса в простой тестовой программе?
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
не появится, пока программа не будет выхода. Это (для меня) означает, что события действия группируются и запускаются/запускаются позже некоторым «домашним заданием», которое делает Reflux.
Есть функция, которую я могу вызвать, чтобы сообщить Reflux, чтобы запустить события, которые были поставлены в очередь?
Чтобы воссоздать этот пример, просто сохранить код в RefluxTest.js и выполните следующие команды:
mkdir RefluxTest
npm init
npm install --save reflux
npm install --save react
node RefluxTest.js
Спасибо.
ПРИМЕЧАНИЕ: Я знаю, что это не является показателем того, как Reflux обычно используется, потому что он находится вне браузера, но мне было любопытно, есть ли у кого-нибудь ответ.
на основе кода из http://spoike.ghost.io/deconstructing-reactjss-flux/
// Code for file RefluxTest.js
// KWS: Learning how Reflux works outside of the browser
var React = require("react/addons");
var TestUtils = React.addons.TestUtils;
var Reflux = require("reflux");
// Creating action
var toggleGem = Reflux.createAction();
// Creates a DataStore
var gemStore = Reflux.createStore({
// Initial setup
init: function() {
this.isGemActivated = false;
// Register statusUpdate action
this.listenTo(toggleGem, this.handleToggleGem);
},
// Callback
handleToggleGem: function() {
console.log('ENTER: gemStore.handleToggleGem: isGemActivated:' + this.isGemActivated);
this.isGemActivated = !this.isGemActivated;
// Pass on to listeners through
// the DataStore.trigger function
this.trigger(this.isGemActivated);
console.log('EXIT: gemStore.handleToggleGem: isGemActivated:' + this.isGemActivated);
}
});
function MyObj() {
gemStore.listen(this.onGemChange);
this.lastUpdate = undefined;
}
MyObj.prototype.toString = function() {
return "lastUpdate=" + this.lastUpdate;
}
MyObj.prototype.onGemChange = function(newVal){
console.log("MyObj.onGemChange: newVal=" + newVal);
this.lastUpdate = newVal;
}
var myObj = new MyObj();
console.log("myObj=" + myObj);
toggleGem();
console.log("myObj=" + myObj);
toggleGem();
console.log("myObj=" + myObj);
ПРИМЕЧАНИЕ. Я создал пример этой программы на основе браузера, и происходит такое же поведение. RefluxAction не вызывается до тех пор, пока не исчезнут логические «основные». В случае браузера это означает, что вызовы Main.jsx ** React.render (, document.getElementById («приложение»)) ** файл javascript завершается, а затем вызывается ReactActions. – PatS