我正在使用Meteor with react和FlowRouter来处理订阅。我发现,当我的组件呈现时,它会在几秒后呈现两次,但只有当我让meteor mixin订阅了订阅时。
例如:
PeoplePage = React.createClass({
displayName:"People",
mixins: [ReactMeteorData],
getMeteorData() {
const subHandles = [
Meteor.subscribe("allPeople"),
];
const subsReady = _.all(subHandles, function (handle) {
return handle.ready();
});
return {
subsReady: subsReady,
people: People.find({}).fetch(),
};
},
render(){
if(this.data.subsReady == false){
return (<Loading/>);
} else {
console.log(this.data);
........
}
相同的信息显示两次。这是由于FlowRouter使用的快速渲染,还是我做错了?
答案 0 :(得分:1)
我建议在componentWillMount()
函数中进行订阅。这样,您确保在初始渲染()之前只订阅一次。
getMeteorData() {
var ready = _.all(this.subHandles, function (handle) {
return handle.ready();
});
return {
subsReady: ready,
people: People.find({}).fetch()
}
},
componentWillMount() {
this.subHandles = [];
this.subHandles.push(Meteor.subscribe('allPeople');
},
componentWillUnmount() {
this.subHandles.map(function(handle) {
handle.stop();
});
}
如果它仍然呈现两次,我建议尝试转换路线的快速渲染并检查是否仍然出现此问题。