流星订阅准备好了

时间:2017-08-03 12:57:07

标签: mongodb reactjs meteor

我正在建立一个反应/流星应用程序。订阅时遇到问题。当subscriotion.ready()为false时,会显示一个组件。当它变为true时,组件被带有数据的表替换,但是ready和来自find()。fetch()的数据之间需要几秒钟,显示另一个组件一段时间。

有什么建议吗?

由于

1 个答案:

答案 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/>
}