2017-08-03 131 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

我已經更新了我的答案,如果它可以幫助別忘了給予好評或接受! :) –