2016-08-22 80 views
0

我使用react-komposer和React在我的應用程序,並在一個點上,我更改用戶的profile財產Meteor.users收集項目,反映當前用戶。這裏的問題是,它不會在render的通話中被動地回送。無論我對Meteor.users集合做什麼,即使我在render函數中引用Meteor.user(),都不會重新渲染該組件。如果我做訂閱Meteor.users收集更新

render() { 
    console.log('rendered'); 

    /// ... 
} 

那我只能看到控制檯上的「渲染」兩次:一次是在組件已初步呈現,並第二次其他訂閱準備。我想訂閱Meteor.users收藏,但我不知道是否有辦法做。

我絕對可以使用Tracker對每個Tracker循環作出反應,但它對我來說感覺太多了。但這是唯一的方法嗎?

而且,我肯定已經閱讀其他Q &隨着對Meteor.usersthis onethis one但包裝用戶收集到的pub/sub的想法直接感覺不自然,幾乎是聽集合中的每個更新的好方法。

+0

發佈和訂閱Meteor.users並沒有什麼不自然的。請參閱下面的答案。 – rdk1992

回答

2

您必須在服務器代碼上發佈有關meteor.users集合的發佈。

Meteor.publish('allUsers', function allUsers() { 
     return Meteor.users.find({}, { 
     fields: { 
      services: 0, 
     }, 
    }); 
    }); 

那麼您可以在容器上訂閱的發佈與查詢Meteor.users收集和結果發送到組件。

const composer = (props, onData) => { 
const userHandle = Meteor.subscribe('allUsers'); 
if (userHandle.ready()) { 
    const users = Meteor.users.find({}).fetch(); 
    onData(null, { 
     users, 
    }); 
} 
}; 
export default composeWithTracker(composer)(YourComponent); 

之後,對YourComponent內部的集合所做的任何更改都將反映在客戶端。