订阅Meteor.users集合更新

时间:2016-08-22 23:44:27

标签: javascript mongodb meteor meteor-publications

我在我的应用中使用了react-komposer和React,并且我一度更改了反映当前用户的profile集合项的用户Meteor.users属性。这里的问题是它在render的调用中没有被动地回送。无论我对Meteor.users集合做什么,即使我在Meteor.user()函数中引用render,也不会重新渲染组件。如果我做

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

  /// ...
}

然后我只能在控制台上看到“呈现”两次:一旦组件最初呈现,第二次其他订阅准备就绪。

我想订阅Meteor.users收藏,但我不知道是否有办法。

我绝对可以使用Tracker对每个Tracker循环做出反应,但对我来说感觉太过分了。但这是唯一的办法吗?

另外,我肯定已经读过其他Q&至于Meteor.users,如this onethis one,但将用户集合包装到pub / sub中的想法直接感觉不自然,几乎不是收听集合中每个更新的好方法。

1 个答案:

答案 0 :(得分:2)

您必须在有关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);

然后,您可以在容器上订阅该发布并查询Meteor.users集合并将该结果发送到组件。

{{1}}

在此之后,对YourComponent内的集合所做的任何更改都将反映在客户端。