组件重排上的流星收集重新排序
为了直接指出问题,我希望确保不管组件是否重新呈现集合的顺序。组件重排上的流星收集重新排序
我有一个流星createContainer元素,我订阅一个集合,然后为它分配一个变量。
export default PipelineTableContainer = createContainer(() => {
const clientsSub = Meteor.subscribe('client.findByOrganisation');
const clients = Clients.find({}, { sort: { createdAt: -1 }).fetch();
return {
clients,
};
}, ClientsView);
ClientsView是一个线条图,显示客户端何时加入。日期至关重要。由于某些原因,当ClientsView组件根据状态更改重新呈现时,客户端集合的顺序将被更改,以便不再按createdAt desc排序。这会导致图表库出现错误,因为日期需要按顺序排列。
重申:我想确保无论组件是否重新呈现集合的顺序都得到维护。
任何意见将非常感谢你和问候。
只是一个快速猜测,但如果您在出版物中订购查询结果,这应该可以解决您的问题。如果您为其他组件使用相同的发布,则可以创建另一个名为client.findByOrganisationOrdered
的组件并在组件中调用它。
如果您采取这种方法,您不需要对客户的集合进行排序,因为您保证发布的结果已经订购。
希望这会有所帮助。如果没有,我想看看这本刊物。
它不能解决问题。排序在服务器和客户端完成。 – eGlu
我也同意TAnas的回答。我认为所有的排序应该在服务器端,而不是在客户端,你也可以在服务器端创建一个索引来尝试加快速度。
collection.rawCollection().createIndex({ createdAt: -1 });
如果你想。
免责声明:本不能解决集合重新排序的问题,但它允许应用程序充当想:
this.state.clients.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
此ES6功能允许我按升序收集/在它之前降序正在使用,所以无论集合是否在重新渲染时重新排序,这将始终启动并确保顺序是正确的。
如果有人知道为什么收集是重新排序,仍然将不胜感激。
你还没有处理订阅的情况仍然*加载*?通常情况下,您还会将*加载*传递给您的组件。请参阅https://themeteorchef.com/tutorials/using-create-container –