使用 flux,我如何获得正确的商店名称
With flux, how do I get the right Store called
我是 react/flux 架构的新手,我缺少一些东西......我想。我有两个 Stores,SubjectsStore.js 和 WorkDoneStore.js,有一个 AppActions 可以执行调度(下面的代码片段)。我的印象是,任何向 AppDispatcher 注册的商店都会收到事件通知,并且每个商店都有责任处理适当的操作类型。似乎没有任何其他方法可以控制调用哪个 Store。在我的例子中,我已经得到了一个 SubjectStores 注册被调用,但我的 WorkDoneStore 没有被调用。我忽略了什么/做错了什么。
AppActions.js
import AppDispatcher from './AppDispatcher.js';
import WorkDoneConstants from '../constants/WorkDoneConstants.js';
import SubjectConstants from '../constants/SubjectConstants.js';
var AppActions = {
addWorkDoneItem:function(item){
console.log("In app actions addWorkDone");
console.log(WorkDoneConstants.WORKDONE_INSERT);
AppDispatcher.dispatch({
actionType:WorkDoneConstants.WORKDONE_INSERT,
item:item
})
}
}
module.exports = AppActions;
SubjectsStore.js
var AppDispatcher = require('../dispatcher/AppDispatcher');
var SubjectConstants = require('../constants/SubjectConstants');
var EventEmitter = require('events').EventEmitter;
...
AppDispatcher.register(function(action) {
var text;
console.log("why am I in the subjectStore?");
console.log(action.actionType);
console.log(action.item);
switch(action.actionType) {
case SubjectConstants.SUBJECT_CREATE:
text = action.text.trim();
...
WorkDoneStore.js
...
AppDispatcher.register(function(action) {
var text;
console.log("In WorkDoneStore");
console.log(action);
switch(action.actionType) {
case WorkDoneConstants.WORKDONE_INSERT:
item = action.item;
if (item.subject !== '') {
create(item);
WorkDoneStore.emitChange();
}
break;
...
我的组件
...
handleSubmit: function(e){
e.preventDefault();
var item = {
subject:this.state.subject,
workDone:this.state.workDone,
minutes:this.state.totalMinutes,
startStop:this.state.startStop,
};
console.log("before AppActions.");
AppActions.addWorkDoneItem(item);
},
...
在查看我的 Webpack 输出时,我注意到 WorkDoneStore.js 没有被包含在内。通过调用它强制包含它,它现在可以工作了。
我是 react/flux 架构的新手,我缺少一些东西......我想。我有两个 Stores,SubjectsStore.js 和 WorkDoneStore.js,有一个 AppActions 可以执行调度(下面的代码片段)。我的印象是,任何向 AppDispatcher 注册的商店都会收到事件通知,并且每个商店都有责任处理适当的操作类型。似乎没有任何其他方法可以控制调用哪个 Store。在我的例子中,我已经得到了一个 SubjectStores 注册被调用,但我的 WorkDoneStore 没有被调用。我忽略了什么/做错了什么。
AppActions.js
import AppDispatcher from './AppDispatcher.js';
import WorkDoneConstants from '../constants/WorkDoneConstants.js';
import SubjectConstants from '../constants/SubjectConstants.js';
var AppActions = {
addWorkDoneItem:function(item){
console.log("In app actions addWorkDone");
console.log(WorkDoneConstants.WORKDONE_INSERT);
AppDispatcher.dispatch({
actionType:WorkDoneConstants.WORKDONE_INSERT,
item:item
})
}
}
module.exports = AppActions;
SubjectsStore.js
var AppDispatcher = require('../dispatcher/AppDispatcher');
var SubjectConstants = require('../constants/SubjectConstants');
var EventEmitter = require('events').EventEmitter;
...
AppDispatcher.register(function(action) {
var text;
console.log("why am I in the subjectStore?");
console.log(action.actionType);
console.log(action.item);
switch(action.actionType) {
case SubjectConstants.SUBJECT_CREATE:
text = action.text.trim();
...
WorkDoneStore.js
...
AppDispatcher.register(function(action) {
var text;
console.log("In WorkDoneStore");
console.log(action);
switch(action.actionType) {
case WorkDoneConstants.WORKDONE_INSERT:
item = action.item;
if (item.subject !== '') {
create(item);
WorkDoneStore.emitChange();
}
break;
...
我的组件
...
handleSubmit: function(e){
e.preventDefault();
var item = {
subject:this.state.subject,
workDone:this.state.workDone,
minutes:this.state.totalMinutes,
startStop:this.state.startStop,
};
console.log("before AppActions.");
AppActions.addWorkDoneItem(item);
},
...
在查看我的 Webpack 输出时,我注意到 WorkDoneStore.js 没有被包含在内。通过调用它强制包含它,它现在可以工作了。