订阅准备就绪后,Meteor React呈现两次

时间:2015-08-25 15:15:15

标签: javascript meteor reactjs flow-router

我正在使用Meteor with react和FlowRouter来处理订阅。我发现,当我的组件呈现时,它会在几秒后呈现两次,但只有当我让meteor mixin订阅了订阅时。

例如:

logged this.data

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使用的快速渲染,还是我做错了?

1 个答案:

答案 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();
    });
}

如果它仍然呈现两次,我建议尝试转换路线的快速渲染并检查是否仍然出现此问题。