【发布时间】:2016-06-08 21:59:25
【问题描述】:
我使用 Meteor 订阅了一个集合,并传递了一个页码以允许分页。限制参数设置为 15,因此不应返回超过 15 个文档,但是当我切换页码时,订阅会连续 3 次返回 15、30 和 15 个文档。只有最后一个是正确的 15。
因此,当表格数据增长到 30 行然后又回到 15 行时,UI 会出现“闪烁”。
我正在为 UI 使用 react 并包含一个类似这样的组件,以将数据作为 props 传递给渲染组件:
export default createContainer(props => {
// Get collection name from router/url and grab mongo collection
let collectionName = props.routeParams.collectionId;
let Collection = CollectionData(collectionName).collection;
// Get paged results based on URL query page
Meteor.subscribe(collectionName, props.location.query.page || 1);
return {
items: Collection.find({}, {sort: {createdAt: -1}}).fetch(),
total: Collection.find({}).count()
};
}, Collection);
在渲染组件中,我更新了路由器历史状态,以更改页码,例如 ?page=1。这会导致重新渲染,这将更新“props.location.query.page”的值,从而允许订阅数据发生变化。我不确定是否有更好的方法来更改分页值。
发布代码如下:
// Publish data
if(Meteor.isServer) {
Meteor.publish(mongoCollectionName, function(page){
if(page) {
let pageSize = 15;
page = parseInt(page)-1;
if(page < 0) page = 0;
return collection.find({}, {limit: pageSize, skip: page*pageSize});
} else {
return collection.find({});
}
});
}
据我所知,在我的组件接收数据之前的某个时间点,meteor 似乎正在加入两个 15 的数组以形成 30 个文档的数组。
【问题讨论】:
标签: javascript meteor reactjs