2017-08-24 61 views
0

爲了直接指出問題,我希望確保不管組件是否重新呈現集合的順序。組件重排上的流星收集重新排序

我有一個流星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 –

回答

0

只是一個快速猜測,但如果您在出版物中訂購查詢結果,這應該可以解決您的問題。如果您爲其他組件使用相同的發佈,則可以創建另一個名爲client.findByOrganisationOrdered的組件並在組件中調用它。

如果您採取這種方法,您不需要對客戶的集合進行排序,因爲您保證發佈的結果已經訂購。

希望這會有所幫助。如果沒有,我想看看這本刊物。

+0

它不能解決問題。排序在服務器和客戶端完成。 – eGlu

1

我也同意TAnas的回答。我認爲所有的排序應該在服務器端,而不是在客戶端,你也可以在服務器端創建一個索引來嘗試加快速度。

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

如果你想。

+0

感謝您的回覆。排序在服務器端完成。我在客戶端也做過這件事,看看是否可以解決問題,但顯然不是。 – eGlu

+0

你有沒有想過在構造函數中訂閱你的訂閱?因爲這將在一個TrackerReact(React.Component)內? – kcuhcx2

+0

我曾經這樣做過,我正在重構我的代碼並希望將邏輯分開。 createContainer對此很有幫助,但顯然它的功能是不同的。 – eGlu

0

免責聲明:本不能解決集合重新排序的問題,但它允許應用程序充當想:

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

此ES6功能允許我按升序收集/在它之前降序正在使用,所以無論集合是否在重新渲染時重新排序,這將始終啓動並確保順序是正確的。

如果有人知道爲什麼收集是重新排序,仍然將不勝感激。