2017-07-24 71 views
0

我在MEteor + React應用程序中創建了一個發佈(在服務器上)和訂閱(在客戶端)。我的問題是,我無法收到出版物返回的數組。我在發佈中使用了console.log,它記錄了訂閱密鑰和選項。我在返回之前也檢查文件,它是正確的。但在客戶端,仍然無法獲得文件數組。在ReactJS中不起作用的子組件訂閱

這裏是我的componentDidMount代碼,

Meteor.subscribe("messages",{},{},function(err){ 
    console.log("err",err); 
    console.log(Messages.find().fetch()); 
}); 

的console.log這裏不叫。

這是我出版的代碼,這裏

if (Meteor.isServer) { 
    Meteor.publish('messages', function (key,option) { 
     console.log(key); 
     return Messages.find(key,option); 
    }); 
} 

的console.log是工作,也是我檢查返回之前的文件,它是正確的。

我在我的應用程序中也使用了反應路由器。我爲我的父組件添加路由。我遇到的問題是在子組件中。

我的代碼有什麼問題?或者如何解決這個問題? 我使用msavin:mongol,並且仍然有0個文件的計數。

+0

來自文檔:[_Meteor將對傳入記錄進行排隊,直到您在客戶端上使用匹配的集合名稱聲明Mongo.Collection](https://docs.meteor.com/api/pubsub.html#Meteor-subscribe) ,你有這樣做嗎? –

回答

0

我想流星廚師正在推廣一個不錯的文件夾結構。如果你碰巧使用它,只是爲了確保你的服務器端操作到達服務器,這意味着它們被導入到服務器。只是從我的一個項目共享一個屏幕: enter image description here

register-api.js進一步向下導入到我的服務器文件夾的main.js中。其次,如果您在訂閱之外執行console.log(Messages.find()。fetch()),該怎麼辦?你把它放到回調函數中,不應該真的在那裏。通常情況下,將Messages.find()。fetch()的結果傳遞給組件容器中的道具,因此需要在訂閱之外捕獲結果。

+0

我將結果傳遞給組件的容器中的道具,但仍然沒有獲得單個文檔。 – JMA