正确使用Meteorjs和Reactjs?

正确使用Meteorjs和Reactjs?,meteor,reactjs,Meteor,Reactjs,我已经添加了“meteor react”软件包,并且正在浏览显微镜教程。在此过程中,我只是用React替换Blaze模板步骤,但我不确定如何正确地执行,以便集合能够与Reactjs框架一起响应 “Posts”是一个mongo集合。 在my main.js中: // Startup application Meteor.startup(function() { var target = document.getElementsByTagName('body')[0]; var dat

我已经添加了“meteor react”软件包,并且正在浏览显微镜教程。在此过程中,我只是用React替换Blaze模板步骤,但我不确定如何正确地执行,以便集合能够与Reactjs框架一起响应

“Posts”是一个mongo集合。 在my main.js中:

// Startup application
Meteor.startup(function() {
   var target = document.getElementsByTagName('body')[0]; 
   var data = Posts.find().fetch();  // RACE CONDITION occurs here.
   React.renderComponent(new StreamAtom({ "data": data}), target);
});
在StreamAtom.jsx react组件中,“数据”只是设置为初始状态

问题:

Posts.find().fetch()存在竞争条件,因此大多数时候页面不会呈现。Meteor中没有回调,Blaze负责处理没有回调的“Posts.find()”,那么我缺少什么呢

另外,如何仅使用Posts.find()而不使用fetch?由于fetch()返回一个结果数组而不是Mongo游标,因此我担心React实际上不会对集合的更改做出反应

提前多谢了


我希望这能帮助我更好地理解流星

将React render函数调用包装到
Tracker.autorun
-这就是Meteor的大部分客户端反应发生的方式:

// Startup application
Meteor.startup(function() {
  Tracker.autorun(function () {
   var target = document.getElementsByTagName('body')[0]; 
   var data = Posts.find().fetch();  // RACE CONDITION occurs here.
   React.renderComponent(new StreamAtom({ "data": data}), target);
  });
});

关于跟踪器的全面指南:

非常感谢!成功了。我很惊讶教程没有提前提到它。Blaze是否在内部运行此功能?Blaze在助手和数据上下文上无缝运行自动运行,然后在没有显式渲染的情况下以最小方式修补DOM。如何使JSX转换作为Meteor构建系统的一部分自动工作?@GiantElk您可以添加这样一个包:,它集成了react构建工具,我将尝试一下这个包,尽管我希望用一种更简单的方法来转换JSX。i、 e.如果我想将ReactJS与Iron Router一起使用,或者只用于简单的静态视图网站,而不访问发布/订阅。