任何人都可以帮我解决这个问题,我正在运行React on Meteor并且我有这个组件使用TrackerReact向Mongo添加一些数据,但是我不能在另一个组件中显示它们在另一个组件中填充这些数据,我是在页面加载后abale到console.log数据,因此我想也许在加载Mongo数据之前页面加载,任何建议请帮助,谢谢:
这里是Adminadd.jsx,我在mongo上保存:
import React from 'react';
import TrackerReact from 'meteor/ultimatejs:tracker-react'
Gifts= new Mongo.Collection("gifts");
export default class AdminAdd extends TrackerReact(React.Component){
addGift(event){
event.preventDefault();
giftName=this.refs.giftname.value.trim();
giftCity=this.refs.giftcity.value.trim();
giftActive=this.refs.giftactive.checked;
Gifts.insert({
name: giftName,
city: giftCity,
active: giftActive,
});
this.refs.giftname.value="";
this.refs.giftcity.value="";
this.refs.giftactive.checked=false;
}
render(){..RenderStuff..}
这是我要加载它们的地方:
import React from 'react';
import Gift from './components/Gift.jsx'
export default class Main extends React.Component{
allgifts(){
return Gifts.find().fetch();
}
render(){
console.log(allgifts());
return(
<div className="row">
{this.allgifts().map((gift)=>{
return
<Gift gift={gift} key={gift._id}/>})}
</div>
)}}
和礼品组件:
import React from 'react';
export default class Gift extends React.Component{
render(){
return(
<div>
<div>
<div>{this.props.gift.name}</div>
<div>{this.props.gift.city}</div>
<div>{this.props.gift.active}</div>
</div>
</div>
)}}
这是控制台日志,首先返回空对象,然后当我在Gifts.find()。fetch()它手动它之后工作:
[]
Gifts.find().fetch()
Object, Object, Object, Object, Object, Object, Object, Object]
答案 0 :(得分:3)
正如koolaang所说,模板可能会在加载Gifts
集合之前首次呈现。然而,真正的问题是,在加载集合时,它不会被动地重新渲染。这是因为您尚未将Main
组件包裹在TrackerReact
中。所以你需要像这样解决它:
export default class Main extends TrackerReact(React.Component) { ... }
现在,一旦集合加载,就应该重新渲染组件。如果要实现加载状态,可以检查订阅准备情况,但这不是必需的。
答案 1 :(得分:1)
这是因为从后端到前端的数据需要时间。 如果您使用发布/订阅,则应使用handle.ready等待数据到达前端。