Reduxを使用した最初のアプリでは、コレクションを推奨どおりに正規化しておくようにしています。 この方法では、エンティティを1か所で変更するだけで済みます。 (これは私にとって正しいと感じます)
最初は、データの配列を、IDをキーとして持つ配列のようなエンティティのオブジェクトに正常に正規化しました。
次に、エンティティをビューに一覧表示したかったので、解析して配列に戻す必要がありました。 また、エンティティをフィルタリングする場合は、実際の配列が必要です。 これは本当に正しいアプローチですか?
再選択の例:
// As "id" for my images i use "uri"
imageEntities = {
uri1: {image...},
uri2: {image...},
....
}
// Selectors:
const imagesSelector = state => state.images;
// parse the Array-like-Object to an Array
const imagesArySelector = createSelector(
[imagesSelector],
images => {
let ary = [];
for (var key in images) {
if (images.hasOwnProperty(key)) {
ary.push(images[key]);
}
}
return ary;
}
);
// filter the Array to get only the new images
export const newImagesSelector = createSelector(
[imagesArySelector],
images => images.filter(image => image.isNew)
);
これは本当に正しいアプローチですか? (私が見ているものから今まで、それはうまく機能しています)
もっとエレガントにできると思います。
私のやり方:
import { createSelector } from 'reselect';
const providersSelector = state => state.entities.providers;
const subscribersSelector = state => state.entities.subscribers;
export const providersArraySelector = createSelector(
[providersSelector],
providers => Object.keys(providers).map(id => providers[id])
);
export const subscribersArraySelector = createSelector(
[subscribersSelector],
subscribers => Object.keys(subscribers).map(id => subscribers[id])
);
@itsmepetrovは 'はるかに良く見えます... thx。
ですから、原則として私は正しい方向に進んでいます。 他の誰か?
次に、エンティティをビューに一覧表示したかったので、解析して配列に戻す必要がありました。
配列の操作がより便利な場合は、IDの配列を保持できます。 ページネーションなどの場合は、これを行う必要があります。 examples
フォルダーのreal-world
例はそれを行います。
最も参考になるコメント
もっとエレガントにできると思います。
私のやり方: