我正在建立一个反应/流星应用程序。订阅时遇到问题。当subscriotion.ready()为false时,会显示一个组件。当它变为true时,组件被带有数据的表替换,但是ready和来自find()。fetch()的数据之间需要几秒钟,显示另一个组件一段时间。
有什么建议吗?
由于
答案 0 :(得分:1)
如果您使用react-meteor-data
,则可以在subscription
媒体资源中获得ready
状态。然后,您可以将此属性发送到演示组件并相应地进行更新。
软件包文档中的示例代码段:
import { createContainer } from 'meteor/react-meteor-data';
export default PresenterContainer = createContainer(props => {
// Do all your reactive data access in this method.
// Note that this subscription will get cleaned up when your component is unmounted
const handle = Meteor.subscribe('publication_name');
return {
isReady: ! handle.ready(),
list: CollectionName.find().fetch(),
};
}, PresenterComponent);
说明:
createContainer
的第一个参数是一个无功函数,只要其无功输入发生变化,它就会重新运行。
PresenterComponent
组件将获得{isReady,list}作为道具。因此,您可以根据isReady
<强>加成强>:
写下演示者组件的render
方法,如下所示:
render(){
if(!this.isReady) return <LoadingComponent/>
else if(this.props.list.length() != 0) return <TableComponent/>
else return <NoDataFoundComponent/>
}