Mongodb 组件渲染两次,第一次数据正确,第二次使用Meteor+;查找()时数据变为空;反应+;流动路由器

Mongodb 组件渲染两次,第一次数据正确,第二次使用Meteor+;查找()时数据变为空;反应+;流动路由器,mongodb,meteor,meteor-react,Mongodb,Meteor,Meteor React,我目前正在使用Meteor+React+MongoDB+FlowRouter。我想在mycourses中添加选定的课程 我成功地在Course.jsx中插入数据并转到MyCourse,但我不知道为什么它会呈现两次,第一次我的数据在控制台上正确打印,但第二次data find()为空[] [{u id:'3nHTJb9gjNWi2JqZL',用户id:123,课程id:[1,2]}] client/components/Course.jsx Course = React.createClass({

我目前正在使用Meteor+React+MongoDB+FlowRouter。我想在mycourses中添加选定的课程

我成功地在Course.jsx中插入数据并转到MyCourse,但我不知道为什么它会呈现两次,第一次我的数据在控制台上正确打印,但第二次data find()为空[]

[{u id:'3nHTJb9gjNWi2JqZL',用户id:123,课程id:[1,2]}]

client/components/Course.jsx

Course = React.createClass({

    mixins: [ReactMeteorData],

    propTypes: {
        courseId: React.PropTypes.number.isRequired,
    },

    getMeteorData () {
        return {
            currentUser : Meteor.user(),
            courseDetail: AllCoursesCol.findOne({
                id: this.props.courseId
            })
        }
    },

    onPressGetGames(e)
    {
        e.preventDefault()

        if (this.data.currentUser)
        {
            Meteor.call("addToMyCourses", this.props.courseId, (error) => {
                if (error) {
                    console.log("Update Course Failed")
                }
                else {
                    console.log("Update Course Success")
                }
            })
            FlowRouter.go("MyCourses")
        }
        else
        {
            FlowRouter.go("Login")
        }
    },

    render() {
        return (
            <div className="container-fluid">
                <div className="row">
                    <div className="col-sm-8">
                        <div className="embed-responsive embed-responsive-16by9">
                          <iframe className="embed-responsive-item" src="https://www.youtube.com/embed/x0nfdbx0Wls" allowFullScreen></iframe>
                        </div>
                    </div>
                    <div className="col-sm-4">
                        <button btn btn-success onClick={this.onPressGetGames}> Get Games </button>
                    </div>
                </div>
                <div className="row">
                    <h1 className="display-5"> Course Description </h1>
                    <p> {this.data.courseDetail.long_des} </p>
                </div>
            </div>
        )
    }
})

我刚刚发现,如果我将FlowRouter.go(“MyCourses”)移出if-else,我实际上可以得到结果,但是mycourse.jsx getMeteorData实际上运行了两次,第一次是数据,第二次是空的。我不知道现在发生了什么
MyCourses = React.createClass({

    mixins: [ReactMeteorData],

    getMeteorData () {

        return {
            myCoursesId: MyCoursesCol.findOne({user_id: Meteor.userId()})
        }
    },

    render() {

        let displayMyCourses

        if (this.data.myCoursesId)
        {
            displayMyCourses = (
                <div className="card-columns">
                    {
                        this.data.myCoursesId.map((id) => {
                            console.log(id)
                            var course = AllCoursesCol.findOne({id: id})
                            console.log(course)
                            return (
                                <MyCourseCard key={course.id} courseId={course.id} title={course.title} shortDes={course.short_des}/>
                            )
                        })
                    }
                </div>
            )
        }
        else
        {
            displayMyCourses = (
                <h5 className="text-xs-center"> You have no course. Go to Browse Course and get some courses. </h5>
            )
        }

        return (
            <div className="container-fluid">
                {displayMyCourses}
            </div>
        )
    }
})
FlowRouter.route("/browsecourses/:courseId", {
    name: "Course",
    action (params) {
        renderMainLayoutWith(<Course courseId={parseInt(params.courseId)}/>)
    }
})

FlowRouter.route("/mycourses", {
    name: "MyCourses",
    subscriptions: function() {
        this.register("myCourses", Meteor.subscribe("myCourses"))
    },
    action (params) {
        renderMainLayoutWith(<MyCourses/>)
    }
})
Meteor.publish("myCourses", () => {
    if (!this.userId) {
        throw new Meteor.Error("not-authorized")
    }

    var data = MyCoursesCol.find({user_id: this.userId})

    return data
})