流星,流路由器和反应:如何让FlowRouter.subsReady()函数在呈现中被反应
问题描述:
我想创建一个模式,以便在加载主页之前准备好所有的订阅。类似于铁路路由器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>
);
}
});
这似乎是现在的工作。这是做到这一点的方式吗?
答
您以错误的方向访问了问题。当使用流星进行反应时,您并不需要检查subsReady
的FlowRouter
。只需安装mixin ReactMeteorData
并正确设置this.data
,它会反应性渲染Dom
。更多详情here
反应render
没有反应。 Dom
仅在组件的props
或state
更改时才会重新渲染
这是不正确的。你确实需要检查潜艇。原因是,如果文档在渲染组件时还没有准备好,我的映射函数将会失败,因为它说'无法读取未定义的属性成员'。这是因为我正在搜索minimongo来映射某个键。在订阅完成之前,我无法呈现组件。 – nearpoint
你真正需要的是检查订阅的数据,而不是'subsReady'状态。仔细想想,无论你是否检查'subsReady',那么你仍然会将数据推送到'state'或者'props'来让组件重新渲染,礼? –
在我的'getMeteorData'函数中我通过查询minimongo来返回文档。然后在渲染函数中,我使用map来渲染组件列表,例如'this.data.studyDoc.members.map((user,index)=> {'问题是如果studyDoc未定义(这将是如果订阅没有准备就绪),那么应用程序崩溃,不会呈现。 – nearpoint