2014-11-01 54 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