我正在使用Meteor,React,react-meteor-data和React Router。我链接到一个页面并添加一个/:id,然后我尝试使用它来查询数据库并使用返回的数据构建组件。
问题是初始查询返回一个空数组。然后我可以在我的render方法和componentWillReceiveProps中看到它返回我稍后期望的数据。问题是我的组件没有重新渲染。我正在使用withTracker,因为我希望每次数据库在目标Collection中更改时,组件都会更新并重新呈现。
以下是客户端的React代码:
export default withTracker((props) => {
const handle = Meteor.subscribe('game', props.match.params.id);
return {
listLoading: !handle.ready(),
game: ActiveGames.find({ _id: props.match.params.id}).fetch(),
};
})(Game);
以下是' imports / api / activeGames.js'中的出版物:
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
export const ActiveGames = new Mongo.Collection('activeGames');
if (Meteor.isServer) {
Meteor.publish('game', function (id) {
check(id, String);
return ActiveGames.find({ _id: id });
});
Meteor.publish('activeGames', function activeGamesPublication() {
return ActiveGames.find();
});
}
以下是我获得的输出的屏幕截图,其中包含用于跟踪相关生命周期方法的控制台日志。
答案 0 :(得分:0)
我相信使用listLoading prop做一些简单的事情。 例如,您的游戏组件可能是:
enum TextEditEvent{
case editingBegin(UITextField)
case editingEnd(UITextField, UITextField?)
case textChanged<T>(String?, UILabel?, T, String) where T:Object, T:Updatable
}
这就是我处理订阅和接收数据之间的时间。
希望它有所帮助,虽然我确定你现在找到了解决方案;)