正确使用Meteorjs与Reactjs?

kai*_*aid 4 meteor reactjs

我已经添加了'meteor-react'软件包,我正在阅读显微镜教程.在此过程中,我只是用React替换Blaze模板步骤,但我不确定如何正确地执行它,以便Collections将与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);
});
Run Code Online (Sandbox Code Playgroud)

在StreamAtom.jsx react组件中,"data"只是设置为初始状态.

问题:

Posts.find().fetch()存在竞争条件,因此大多数时候页面都不呈现.Meteor中没有回调,Blaze会在没有回调的情况下处理"Posts.find()",所以我错过了什么?

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

非常感谢提前,

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

ims*_*vko 7

将React渲染函数调用包装进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);
  });
});
Run Code Online (Sandbox Code Playgroud)

关于Tracker的综合指南:https://github.com/meteor/meteor/tree/devel/packages/tracker