2017-08-26 19 views
1

進入終極版的世界,只是想以確保如果我在做什麼是理智和正確的。例如,我們已恢復正常狀態,看起來像這樣:終極版規格化狀態形狀刪除參考ID的多個地方

```

posts: { 
     "1": { 
     "id": "1", 
     "title": "My first post!", 
     "author": "Jake", 
     }, 
     "2": { 
     "id": "2", 
     "title": "This other other post", 
     "author": "Paul", 
     }, 
     "3": { 
     "id": "3", 
     "title": "This new post", 
     "author": "Billy", 
     }, 
     "4": { 
     "id": "4", 
     "title": "This other other other post", 
     "author": "Arnold", 
     }, 
    }, 
globalFeed: { 
    postIds:["1","2","3","4"] 
}, 
myFeed: { 
    postIds:["1","2"] 
}, 

```

我們有兩個不同的飼料,並有包含它們的帖子引用。我讀丹·阿布拉莫夫的地方張貼關於標準化狀態刪除項目,他提到,刪除引用該項目是很好的解決方案,如果它是一個列表。

但在我的應用程序,我們可以看到的職位名單,看到一個帖子,所以僅刪除引用是不是一個解決方案。所以我的問題是,如果我只是從狀態刪除特定的帖子(即用Id 1發佈)並且保持引用完好。然後使用選擇器檢索帖子並過濾未定義的值。這個解決方案是否理智?我會遇到一些問題嗎?有沒有更好的解決方案?我可以刪除特定的帖子和引用,但是如果有多個引用該帖子的地方,它就是很多樣板文件。

選擇例如

```

const globalFeedPosts = state => { 
    return state.globalFeed.postIds 
     .map(id => state.posts[id]) 
     .filter(value => value !== undefined) 
}; 

```

感謝

回答

0

你會definetly遇到的問題,如果您刪除您從resux商店發佈對象,在我認爲更好的辦法是在每一個崗位的對象,這將使過濾柱陣列像下面需要somewath的增加一個標誌,希望這HEL PS。

posts: { 
     "1": { 
     "id": "1", 
     "title": "My first post!", 
     "author": "Jake", 
     "isShown":true 
     }, 
     "2": { 
     "id": "2", 
     "title": "This other other post", 
     "author": "Paul", 
     "isShown":false 
     }, 
     "3": { 
     "id": "3", 
     "title": "This new post", 
     "author": "Billy", 
     "isShown":false 
     }, 
     "4": { 
     "id": "4", 
     "title": "This other other other post", 
     "author": "Arnold", 
     "isShown":false 
     }, 
    }, 
globalFeed: { 
    postIds:["1","2","3","4"] 
}, 
myFeed: { 
    postIds:["1","2"] 
}, 
+0

你能詳細說明我可以遇到什麼問題嗎?僅用於教育目的。您的解決方案聽起來更好,所以選擇將是相同的,而不是僅僅過濾掉那些不確定的,過濾的帖子是「被示」的帖子:真實的,是嗎? :) – Polisas

+0

yieah,絕對。因此,我們將面臨的問題是 - 一旦從商店中刪除帖子對象,我們可能會引用它,但我們將永遠無法取回原始帖子對象,我們將失去該對象,並且爲了使其再次可用,我們必須在刪除它之前創建它的冗餘副本,因爲如果我們嘗試再次添加它,則需要它。希望這可以幫助。遺憾的評論 – mindaJalaj

+0

沒有問題,感謝澄清的長度。 – Polisas