簡體   English   中英

flux / react:如何處理商店中過濾的api-data

[英]flux / react: how to handle filtered api-data in a store

我創建了一個使用通量模式並從API中提取數據的應用程序。 這是更新數據現在的工作原理:

  1. Component調用get()動作
  2. 該操作從API中提取數據
  3. 該操作將storechange事件調度到包含新數據的相關存儲
  4. 存儲使用從操作接收的有效內容更新其狀態,並發出viewchange事件
  5. 該組件偵聽viewchange事件,從存儲中提取新項並重新呈現

到目前為止這個工作正常。 但現在我想知道我將如何進行過濾。 例如,對於特定組件(“通知”),我只想返回未讀通知或給定時間段內的通知。 當我實現一個動作getByStatus(status) getByDate(start, end) ,整個商店只會包含未讀通知或時間段中的通知,當你想要同時顯示所有通知和未讀通知時,這是一個問題時間。

是唯一的方法來創建一個使用javascript / lodash或類似的過濾器方法? 這會使服務器端的任何過濾都過時,並導致大量(不需要的)流量。 而創建像“UnreadNotificationStore”這樣的獨立商店將是非常難以處理的,並且在時間段的情況下問題仍然存在。 我能想到的唯一方法是添加getByStatus(status)操作而不更新存儲,並將數據直接返回給組件。

您實際上是在談論從內存客戶端已有的有效負載中過濾項目,還是需要從服務器對這些“過濾器”進行新的提取?

如果只是過濾客戶端:

  1. 將所有提取的項目存儲在商店的collection分支中。
  2. 調度您的過濾器選擇並將其存儲在filter變量中。
  3. 使用類似@cley建議的.filter方法過濾您的collection ,並將過濾后的id存儲在filteredCollection變量中。
  4. getFilteredItems一樣向商店添加一個getter,它返回映射到collection完整記錄的過濾id。

如果每次從服務器獲取:

  1. 與上面相同,但將完整項目存儲在filteredCollection而不僅僅是id。 (除非你最終會在內存中結束大量數據,在這種情況下你可以考慮維護一個集合,你可以通過服務器的每次提取來擴充,然后從中進行過濾,但這會增加一些復雜性,我不會除非你確定你會有記憶問題,否則不建議。)

還有許多其他可能性,但這是一個合理的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM