2016-08-22 9 views
0

Я использую react-komposer и реагирую в своем приложении, и в какой-то момент я изменяю свойство пользователя profile объекта коллекции Meteor.users, отображающего текущего пользователя. Проблема здесь в том, что она не реагирует на петлю при вызове render. Что бы я ни делал с коллекцией Meteor.users, хотя я имею в виду Meteor.user() в функции render, не перерисовывает компонент. Если яПодпишитесь на обновления коллекции Meteor.users

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

    /// ... 
} 

, то я могу только увидеть «оказали» на консоли дважды: после того, как компонент был первоначально оказанной, и второй раз другие подписки готовы.

Я хочу подписаться на коллекцию Meteor.users, но я не знаю, есть ли способ сделать это.

Я мог бы определенно использовать Tracker, чтобы реагировать на каждый цикл Tracker, но мне кажется, что это слишком 1,2 для меня. Но это единственный способ сделать это?

Кроме того, я определенно прочитал другой Q & Как о Meteor.users как this one или this one но идея упаковки коллекции пользователей в пабе/суб непосредственно чувствует себя неестественно, и вряд ли это хороший способ слушать каждое обновление в коллекции.

+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, будут отображаться на стороне клиента.

Смежные вопросы