【发布时间】:2016-10-10 17:05:27
【问题描述】:
我正在使用 Meteor 1.4 / React 构建一个中型应用程序。所以我试图在构建我的应用程序时找到 Meteor 1.4 / React 之间数据处理的“最佳实践”。
目前我正在使用 createContainer 来处理 Meteor 和 React 组件之间的数据,如下例所示。
话虽如此,我已经阅读了许多关于使用 Meteor 包/功能(如 React Komposer、TrackerReact 和 React Document 容器)的文章/论坛帖子。
所以我不确定对于随着时间的推移规模会增加的中型项目,哪一个最适合。所以我想知道是否有人通过了类似的经历/尝试过这些包可以与我分享他们的经验?
提前感谢您的帮助和时间
import React, { Component } from 'react';
import { createContainer } from 'meteor/react-meteor-data';
export default class DDOrganization extends Component {
getOrganizations(){
let org = this.props.org;
return Organizations.find({'name': {'$regex': org}});
}
renderOrganizations(){
return this.getOrganizations().bind(this).map((org) => {
return (
<li key={org._id}><a href="#" data-id={org._id} onClick={this.props.setOrgState}>{org.name}</a></li>
)
});
}
render(){
let {organizations} = this.props;
return (
<ul className="select-organization-list">
{this.renderOrganizations().bind(this)}
</ul>
)
}
};
export default createContainer(() => {
let organizations = {};
let {org} = this.props;
let orgSub = Meteor.subscribe("OrgSubscription", org);
if(orgSub.ready()){
organizations = Organizations.find({'name': {'$regex': org}}).fetch();
}
return {
organizations: organizations
}
}, DDOrganization);
【问题讨论】:
-
如果我是你,我会避免使用
createContainer。有一个很大的problem in it's implementation,如果您的计算被某些反应性数据源无效,它会导致重新评估所有包装的订阅。这是错误的,因为当您的订阅参数不更改时,来自该订阅的数据应该保持不变。 -
感谢您的帮助,您介意告诉我,您会推荐什么来替代中型 Meteor 1.4 项目的 createContainer 吗?说了这么多,很抱歉我没有在这里说清楚,所以请您详细说明一下吗?根据我到目前为止的理解,您的意思是它会重新评估容器中的所有订阅,即使是那些没有在服务器上更改数据的订阅,我说得对吗?谢谢
-
简而言之,我建议使用
react-komposer。稍后我会写更多。