组件重排上的流星收集重新排序

问题描述:

为了直接指出问题,我希望确保不管组件是否重新呈现集合的顺序。组件重排上的流星收集重新排序

我有一个流星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排序。这会导致图表库出现错误,因为日期需要按顺序排列。

重申:我想确保无论组件是否重新呈现集合的顺序都得到维护。

任何意见将非常感谢你和问候。

+0

你还没有处理订阅的情况仍然*加载*?通常情况下,您还会将*加载*传递给您的组件。请参阅https://themeteorchef.com/tutorials/using-create-container –

只是一个快速猜测,但如果您在出版物中订购查询结果,这应该可以解决您的问题。如果您为其他组件使用相同的发布,则可以创建另一个名为client.findByOrganisationOrdered的组件并在组件中调用它。

如果您采取这种方法,您不需要对客户的集合进行排序,因为您保证发布的结果已经订购。

希望这会有所帮助。如果没有,我想看看这本刊物。

+0

它不能解决问题。排序在服务器和客户端完成。 – eGlu

我也同意TAnas的回答。我认为所有的排序应该在服务器端,而不是在客户端,你也可以在服务器端创建一个索引来尝试加快速度。

collection.rawCollection().createIndex({ createdAt: -1 }); 

如果你想。

+0

感谢您的回复。排序在服务器端完成。我在客户端也做过这件事,看看是否可以解决问题,但显然不是。 – eGlu

+0

你有没有想过在构造函数中订阅你的订阅?因为这将在一个TrackerReact(React.Component)内? – kcuhcx2

+0

我曾经这样做过,我正在重构我的代码并希望将逻辑分开。 createContainer对此很有帮助,但显然它的功能是不同的。 – eGlu

免责声明:本不能解决集合重新排序的问题,但它允许应用程序充当想:

this.state.clients.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()); 

此ES6功能允许我按升序收集/在它之前降序正在使用,所以无论集合是否在重新渲染时重新排序,这将始终启动并确保顺序是正确的。

如果有人知道为什么收集是重新排序,仍然将不胜感激。