正确使用Meteorjs与Reactjs?

时间:2014-11-01 04:59:30

标签: meteor reactjs

我已经添加了“流星反应”'包,我正在浏览显微镜教程。在此过程中,我只是用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);
});

在StreamAtom.jsx反应组件中,"数据"只是设置为初始状态。

问题:

Posts.find()。fetch()存在竞争条件,因此大多数时候页面都不会渲染。 Meteor中没有回调,而Blaze负责照顾" Posts.find()"没有回调,所以我错过了什么?

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

提前多多感谢,

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

1 个答案:

答案 0 :(得分: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);
  });
});

跟踪器综合指南:https://github.com/meteor/meteor/tree/devel/packages/tracker