我正在一个ReactJS和Meteor项目中,我发现一个奇怪的行为要在这里描述:
内部有一个Tracker.autorun
调用的Meteor.subscribe
块。到目前为止,一切都很好。在服务器端,有一个匹配的Meteor.publish
声明了回调。
据我了解,Meteor.publish
回调应为收到的每个订阅触发一次,但是不知何故此回调为单个订阅触发3〜4次。
在我的上一次测试中,Tracker.autorun
块执行了4次,订阅仅执行了1次,并且回调触发了4次。
Meteor.subscribe
仅运行一次,甚至跟踪器也运行几次。怎么会导致回调再次触发一次?
这有意义吗? 您知道什么可以解释这种行为吗?
如果您需要其他任何信息,请告诉我。 预先感谢
Meteor.publish('current-user', function currentUser(credentials) {
return Users.find();
});
Tracker.autorun((c) => {
if (!currentUserHandler) {
currentUserHandler = Meteor.subscribe('current-user', this.credentials);
}
});
答案 0 :(得分:0)
您应该期望自动运行将在正常情况下触发两次,一次不包含数据,第二次包含一些数据。
那是为了让您在数据到达之前显示“正在加载”状态。
您正在订阅users
集合special
。流星使用它进行身份验证,并记录会话活动。您正在执行Users.find()
,这是对整个用户集合的未经过滤的查询,因此对任何用户的任何修改都将导致它触发。出于安全原因,您也将无法看到所有用户记录。
您可能会在用户记录上存储其他数据,因此需要您订阅它。我建议您考虑将这些数据存储在另一个集合中,例如“成员”,“访客”,“个人资料”或适合您的任何名称。这样事情可能会更好地工作。