Reflux.js + React.js 触发结果错误
Reflux.js + React.js trigger result is wrong
我正在尝试创建一个具有反应和回流提取功能的动态 NavBar
。
这是我的操作文件:
var Reflux = require('reflux');
var SubMenuActions = Reflux.createActions([
'getSubItems'
]);
module.exports = SubMenuActions;
我的商店文件:
var Reflux = require('reflux');
var SubMenuActions = require('../actions/SubMenuActions.jsx');
var HTTP = require('../services/httpService.js');
var SubMenuStore = Reflux.createStore({
listenables: [SubMenuActions],
getSubItems: function(urls){
var promises = [];
var thys = this;
for(var i in urls){
promises.push(HTTP.getSubItems(urls[i]));
}
Promise.all(promises).then(function(data){
thys.trigger(data);
});
}
});
module.exports = SubMenuStore;
我的http方法:
getSubItems: function(url){
return fetch(url)
.then(function(response){
return response.json();
});
}
最后一个,我捕获触发器的 navitem 文件:
var React = require('react');
var NavSubItem = require('./NavSubItem.jsx');
var SubMenuStore = require('../reflux/stores/SubMenuStore.jsx');
var Reflux = require('reflux');
var NavItem = React.createClass({
mixins: [Reflux.listenTo(SubMenuStore, 'onChange')],
getInitialState: function(){
return{
urls: this.props.urls,
subItems: []
};
},
componentWillMount: function(){
SubMenuStore.getSubItems(this.state.urls);
},
onChange: function(items){
console.log(items);
},
createNavSubItem: function(item, index){
return <NavSubItem key={item + index} name={item.name}/>;
},
render: function(){
return(
<li className="menuLists dropdown">
<a href="#"
className="dropdown-toggle"
data-toggle="dropdown"
role="button"
aria-haspopup="true"
aria-expanded="false">{this.props.name}
<span className="caret"></span>
</a>
<ul className="dropdown-menu">
{this.state.subItems.map(this.createNavSubItem)}
</ul>
</li>
);
}
});
module.exports = NavItem;
问题是,当我检查 onChange
方法中 "console.log(items)" 的结果时,我收到每个结果两次,就好像触发方法被触发了两次一样。
这就是为什么我的导航栏不能完全正确的原因。
有人知道这个问题吗??
请帮助我!
在 componentWillMount 中你应该使用一个动作,而不是直接调用商店。
我正在尝试创建一个具有反应和回流提取功能的动态 NavBar
。
这是我的操作文件:
var Reflux = require('reflux');
var SubMenuActions = Reflux.createActions([
'getSubItems'
]);
module.exports = SubMenuActions;
我的商店文件:
var Reflux = require('reflux');
var SubMenuActions = require('../actions/SubMenuActions.jsx');
var HTTP = require('../services/httpService.js');
var SubMenuStore = Reflux.createStore({
listenables: [SubMenuActions],
getSubItems: function(urls){
var promises = [];
var thys = this;
for(var i in urls){
promises.push(HTTP.getSubItems(urls[i]));
}
Promise.all(promises).then(function(data){
thys.trigger(data);
});
}
});
module.exports = SubMenuStore;
我的http方法:
getSubItems: function(url){
return fetch(url)
.then(function(response){
return response.json();
});
}
最后一个,我捕获触发器的 navitem 文件:
var React = require('react');
var NavSubItem = require('./NavSubItem.jsx');
var SubMenuStore = require('../reflux/stores/SubMenuStore.jsx');
var Reflux = require('reflux');
var NavItem = React.createClass({
mixins: [Reflux.listenTo(SubMenuStore, 'onChange')],
getInitialState: function(){
return{
urls: this.props.urls,
subItems: []
};
},
componentWillMount: function(){
SubMenuStore.getSubItems(this.state.urls);
},
onChange: function(items){
console.log(items);
},
createNavSubItem: function(item, index){
return <NavSubItem key={item + index} name={item.name}/>;
},
render: function(){
return(
<li className="menuLists dropdown">
<a href="#"
className="dropdown-toggle"
data-toggle="dropdown"
role="button"
aria-haspopup="true"
aria-expanded="false">{this.props.name}
<span className="caret"></span>
</a>
<ul className="dropdown-menu">
{this.state.subItems.map(this.createNavSubItem)}
</ul>
</li>
);
}
});
module.exports = NavItem;
问题是,当我检查 onChange
方法中 "console.log(items)" 的结果时,我收到每个结果两次,就好像触发方法被触发了两次一样。
这就是为什么我的导航栏不能完全正确的原因。
有人知道这个问题吗?? 请帮助我!
在 componentWillMount 中你应该使用一个动作,而不是直接调用商店。