我有这样一个 Meteor 应用程序示例:
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import { Mongo } from 'meteor/mongo';
Things = new Mongo.Collection('things');
if (Meteor.isClient) {
Meteor.startup(() => {
Tracker.autorun(() => {
console.log('AUTORUN');
});
Meteor.subscribe('things');
render(<div>Hello world</div>, document.getElementById('app'));
});
} else if (Meteor.isServer) {
Meteor.publish('things', function() {
return Things.find({});
});
}
我希望在修改我的Things
集合中的一个文档时自动运行功能应该被触发,但事实并非如此。所以我的问题是:修改订阅的数据后应该满足什么条件才能触发自动运行功能?
你在这里有两个错误:
ATracker.autorun
只检测它包装的函数内的变化(作为它的参数)。这里你只有一个console.log
,它不是自动运行可以观察的反应源。
Pub/Sub 机制和文档本身是有区别的。当您修改文档时,您的订阅不会改变。但是如果你在你的自动运行中放置一个 Collection查询,那么查询返回的游标是一个响应源,当文档被修改时它会改变。
所以你可以这样做:
Meteor.startup(() => {
Meteor.subscribe('things');
Tracker.autorun(() => {
Things.find(); // <= Reactive source
console.log('AUTORUN');
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句