0

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

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

  /// ...
}

那么我只能在控制台上看到两次“渲染”:一次是最初渲染组件,第二次是其他订阅准备好。

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

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

另外,我肯定已经阅读过其他问答,Meteor.users比如这个这个,但是将用户集合直接包装到 pub/sub 中的想法感觉不自然,而且几乎不是收听集合中每个更新的好方法。

4

1 回答 1

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 中的集合所做的任何更改都将反映在客户端。

于 2016-08-23T20:36:20.080 回答