2017-08-03 106 views
0

我'建立一个反应/流星应用。我遇到订阅问题。当subscriotion.ready()为false时会显示一个组件。当它变成真正的组件由数据表所取代,但它需要的准备,并从find()方法的数据之间的几秒钟。取(),显示了一会儿另一个组件。流星订阅准备

有什么建议吗?

感谢

回答

1

如果您正在使用react-meteor-data你可以在ready财产subscription状态。然后,您可以将此属性发送到演示组件并相应地进行更新。从包中的文件

的示例代码段:

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,列表}道具。所以,你可以根据isReady

加成状态呈现您的组件: 写您这样的演示组件的render方法:

render(){ 
    if(!this.isReady) return <LoadingComponent/> 
    else if(this.props.list.length() != 0) return <TableComponent/> 
    else return <NoDataFoundComponent/> 
} 
+0

您好,感谢..我是做这个差不多,只是我有一个Meteor.autorun所述签约在我删除,但准备和查找数据仍然存在之间的延迟。大约1秒钟,足以显示“没有找到记录”的组件。 –

+0

谢谢,我只是固定它改变由观看参数“没有找到记录”组件,现在它基于准备和counts.get()== 0。现在是加载组件删除和数据之间的时间,但没有“找不到记录”组件的情况下它会好得多。 –

+0

我已经更新了我的答案,如果它可以帮助别忘了给予好评或接受! :) –