0
我想創建一個模式,以便在加載主頁之前準備好所有的訂閱。類似於鐵路路由器waitOn。流星,流路由器和反應:如何讓FlowRouter.subsReady()函數在呈現中被反應
看看這個反應成分:
export const PageContainer = React.createClass({
render() {
return (
<div id="content-box">
<div className="banner banner-primary">
<div className="page_title pull-left">
{this.props.pageName}
</div>
</div>
<div>
{ FlowRouter.subsReady() ? this.props.page : (
<div> Loading .... </div>
)
}
</div>
</div>
);
}
});
,你可以看到我使用的是FlowRouter.subsReady()
幫手來渲染頁面或加載文本。
問題是這不是被動的。它只呈現一次,但不會更新並在訂閱準備就緒後顯示該頁面。
我怎樣才能得到這個反應?
使用Flow Router的訂閱管理與React的最佳方式是什麼?我有一個基礎佈局,並希望在加載頁面主之前顯示加載符號。如果我能讓這個功能被反應,它應該工作得很好。
UPDATE:
好像我有助手,FlowRouter.subsReady()連接到獲取流星數據功能
export const PageContainer = React.createClass({
mixins: [ ReactMeteorData ],
getMeteorData() {
return {
isLoading: FlowRouter.subsReady()
}
},
render() {
return (
<div id="content-box">
<div className="banner banner-primary">
<div className="page_title pull-left">
{this.props.pageName}
</div>
<i className="fa fa-question-circle help-icon pull-right"></i>
</div>
<div>
{ this.data.isLoading ? this.props.page : (
<div> Loading ... </div>
)
}
</div>
</div>
);
}
});
這似乎是現在的工作。這是做到這一點的方式嗎?
這是不正確的。你確實需要檢查潛艇。原因是,如果文檔在渲染組件時還沒有準備好,我的映射函數將會失敗,因爲它說'無法讀取未定義的屬性成員'。這是因爲我正在搜索minimongo來映射某個鍵。在訂閱完成之前,我無法呈現組件。 – nearpoint
你真正需要的是檢查訂閱的數據,而不是'subsReady'狀態。仔細想想,無論你是否檢查'subsReady',那麼你仍然會將數據推送到'state'或者'props'來讓組件重新渲染,禮? –
在我的'getMeteorData'函數中我通過查詢minimongo來返回文檔。然後在渲染函數中,我使用map來渲染組件列表,例如'this.data.studyDoc.members.map((user,index)=> {'問題是如果studyDoc未定義(這將是如果訂閱沒有準備就緒),那麼應用程序崩潰,不會呈現。 – nearpoint