2014-11-01 42 views
3

我已经添加了'meteor-react'包,并且要通过显微镜教程。一路走来,我只是用React替换了Blaze模板步骤,但我不确定如何正确执行,以便Collections可以与Reactjs框架进行反应。正确使用Meteorjs与Reactjs?

“职位”是一个mongo集合。 以我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反应组分,“数据”被简单地设定为初始状态。

问题:

有一个与Posts.find()的竞争条件取(),所以大部分时间的页面不呈现。 Meteor没有回调,Blaze负责“Posts.find()”而没有回调,所以我错过了什么?

另外,如何在没有获取的情况下只使用Posts.find()?由于fetch()返回的是一个结果数组而不是Mongo游标,所以恐怕React实际上不会对集合的更改产生反应。

非常感谢提前,

我希望这将有助于我了解流星更好。

回答

6

包裹阵营呈现函数调用为Tracker.autorun - 这是多么大多数流星的客户端反应的发生:https://github.com/meteor/meteor/tree/devel/packages/tracker

+0

非常感谢:

// 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是否在内部运行? – kaid 2014-11-01 06:36:38

+1

Blaze在助手和数据上下文上无缝运行Autoruns,然后以最低限度的方式修补DOM而不进行显式渲染。 – imslavko 2014-11-01 06:43:43

+0

如何将JSX转换作为Meteor构建系统的一部分自动工作? – 2015-03-30 20:43:07