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没有什么不自然的。见下面我的答案。