Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 订阅Meteor.users收藏更新_Javascript_Mongodb_Meteor_Meteor Publications - Fatal编程技术网

Javascript 订阅Meteor.users收藏更新

Javascript 订阅Meteor.users收藏更新,javascript,mongodb,meteor,meteor-publications,Javascript,Mongodb,Meteor,Meteor Publications,我在我的应用程序中使用并做出反应,并在某一点上更改用户反映当前用户的Meteor.users集合项的配置文件属性。这里的问题是,它不会在调用render时进行反应性循环。无论我对Meteor.users集合做什么,即使我在render函数中引用了Meteor.user(),也不会重新渲染组件。如果我这样做 render() { console.log('rendered'); /// ... } 然后,我只能在控制台上看到两次“呈现”:一次是组件最初呈现,另一次是其他订阅准备就绪 我

我在我的应用程序中使用并做出反应,并在某一点上更改用户反映当前用户的
Meteor.users
集合项的
配置文件
属性。这里的问题是,它不会在调用
render
时进行反应性循环。无论我对Meteor.users集合做什么,即使我在
render
函数中引用了
Meteor.user()
,也不会重新渲染组件。如果我这样做

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

  /// ...
}
然后,我只能在控制台上看到两次“呈现”:一次是组件最初呈现,另一次是其他订阅准备就绪

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

我当然可以使用跟踪器对每一个跟踪器循环做出反应,但对我来说感觉太1.2了。但这是唯一的办法吗


此外,我肯定也读过其他关于Meteor的问答。用户喜欢或,但将用户集合包装到pub/sub中的想法感觉很不自然,很难听到集合中的每个更新。你必须在服务器上发布有关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);

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

您必须在服务器上发布有关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);

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

发布和订阅Meteor.users没有任何不自然之处。请看下面我的答案。发布和订阅Meteor.users没有什么不自然的。见下面我的答案。