サーバーからの応答を正規化するために normalizr で redux を使用します。基本的には実際の例に従います。この方法entities
のレデューサーは非常に単純で、応答をマージするだけです。私が今抱えている問題は、一種のdelete
操作です。このissue#21 の normalizr リポジトリを見つけましたが、これを解決する方法がわかりませんでした。例えば、
現在の状態は
{
entities:
product_categories: {
...
13: {
...
products: ["1", "2"], <--------------- [i] Current state
...
}
},
products: {
1: {
id: "1"
}
}
}
正規化された応答は
{
...
product_categories: {
...
13: {
...
products: ["1"], <---------------- [2] Normalized result
}
...
}
ご覧のとおり、バックエンド API は、このカテゴリに属するすべての製品 ID を返します。この場合、「2」は切り離されています。「entities」レデューサーがこの応答をマージすると、「2」がまだぶらぶらしています。今はページをリロードするだけですが、このケースを処理するためのより良い方法があるかどうか疑問に思っていますか?
レデューサーではentities
、実際の例のようにマージするだけです。
return merge({}, state, action.payload.entities);