我已经添加了“流星反应”'包,我正在浏览显微镜教程。在此过程中,我只是用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实际上不会对集合的更改做出反应。
提前多多感谢,
我希望这能帮助我更好地了解流星。
答案 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