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