为什么 findOne() 在 withTracker() 部分不起作用,但它在 render() 方法中起作用?
Why findOne() doesn't work in withTracker() section but it does work in render() method?
Meteor 和 React。我正在尝试订阅 mongo 的两个集合,并使用特定文档将其传递给组件。如果我尝试获取 whitTracker () 部分中的文档,它似乎会在同步文档和 returns 无限期之前搜索它。但是,如果我在渲染部分执行此操作,在确保 isLoading 为 false 之后,它就可以工作了。从我订阅的集合中查找数据的正确位置在哪里?
这(在 withTracker 部分进行查询)不起作用:laLoca 和 laLoca1 将未定义。
render() {
if (this.props.isLoading) {
return <LoaderExampleText />;
}
return (<MyMap laLoca={this.props.laLoca} />);
}
}
export default withTracker(() => {
const handles = [
Meteor.subscribe("wells"),
Meteor.subscribe("locaciones"),
Meteor.subscribe("Drylocationlast")
];
const isLoading = handles.some(handle => !handle.ready());
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return {
laLoca:laLoca,
wells: Wells.find().fetch(),
isLoading: isLoading
};
})(WellHome);
但是这个(在 render 方法中进行查询)确实有效:
render() {
if (this.props.isLoading) {
return <LoaderExampleText />;
}
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return (<MyMap laLoca={laLoca} />);
}
}
export default withTracker(() => {
const handles = [
Meteor.subscribe("wells"),
Meteor.subscribe("locaciones"),
Meteor.subscribe("Drylocationlast")
];
const isLoading = handles.some(handle => !handle.ready());
return {
wells: Wells.find().fetch(),
isLoading: isLoading
};
})(WellHome);
如果 laLoca1
未定义,laLoca1.dryLocationId
将崩溃(您在控制台中看到错误,对吧?),我想跟踪将无法正确设置。
当你输入:
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
在 render()
确认订阅已准备就绪后,它们将永远不会未定义,它会起作用。
我认为最理想的是,render()
不应该负责获取数据,只负责可视化。在 withTracker()
你可以这样做:
const isLoading = handles.some(handle => !handle.ready());
if(isLoading){
return {
laLoca: null,
wells: null,
isLoading: true
};
}else{
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return {
laLoca: laLoca,
wells: Wells.find().fetch(),
isLoading: false
};
}
Meteor 和 React。我正在尝试订阅 mongo 的两个集合,并使用特定文档将其传递给组件。如果我尝试获取 whitTracker () 部分中的文档,它似乎会在同步文档和 returns 无限期之前搜索它。但是,如果我在渲染部分执行此操作,在确保 isLoading 为 false 之后,它就可以工作了。从我订阅的集合中查找数据的正确位置在哪里?
这(在 withTracker 部分进行查询)不起作用:laLoca 和 laLoca1 将未定义。
render() {
if (this.props.isLoading) {
return <LoaderExampleText />;
}
return (<MyMap laLoca={this.props.laLoca} />);
}
}
export default withTracker(() => {
const handles = [
Meteor.subscribe("wells"),
Meteor.subscribe("locaciones"),
Meteor.subscribe("Drylocationlast")
];
const isLoading = handles.some(handle => !handle.ready());
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return {
laLoca:laLoca,
wells: Wells.find().fetch(),
isLoading: isLoading
};
})(WellHome);
但是这个(在 render 方法中进行查询)确实有效:
render() {
if (this.props.isLoading) {
return <LoaderExampleText />;
}
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return (<MyMap laLoca={laLoca} />);
}
}
export default withTracker(() => {
const handles = [
Meteor.subscribe("wells"),
Meteor.subscribe("locaciones"),
Meteor.subscribe("Drylocationlast")
];
const isLoading = handles.some(handle => !handle.ready());
return {
wells: Wells.find().fetch(),
isLoading: isLoading
};
})(WellHome);
如果 laLoca1
未定义,laLoca1.dryLocationId
将崩溃(您在控制台中看到错误,对吧?),我想跟踪将无法正确设置。
当你输入:
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
在 render()
确认订阅已准备就绪后,它们将永远不会未定义,它会起作用。
我认为最理想的是,render()
不应该负责获取数据,只负责可视化。在 withTracker()
你可以这样做:
const isLoading = handles.some(handle => !handle.ready());
if(isLoading){
return {
laLoca: null,
wells: null,
isLoading: true
};
}else{
const laLoca1 = Drylocationlast.findOne({ codigo: "dl" });
const laLoca = Locaciones.findOne(laLoca1.dryLocationId);
return {
laLoca: laLoca,
wells: Wells.find().fetch(),
isLoading: false
};
}