Di Aplikasi pertama saya dengan Redux, saya mencoba untuk menjaga agar koleksi saya dinormalisasi seperti yang disarankan. Dengan cara ini Anda hanya perlu mengubah Entitas di satu tempat. (ini terasa benar bagi saya)
Pada awalnya saya berhasil menormalkan Array data saya ke Objek Entitas yang mirip Array dengan id sebagai kuncinya
Lalu saya ingin membuat daftar entitas dalam View, jadi saya harus mengurai kembali ke Array. Juga jika saya ingin memfilter Entitas saya, saya memerlukan Array yang sebenarnya. Apakah ini benar-benar pendekatan yang tepat?
Contoh dengan pemilihan ulang:
// 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)
);
Apakah ini benar-benar pendekatan yang tepat? (ini berfungsi dengan baik, dari apa yang saya lihat sampai sekarang)
Saya pikir itu bisa dilakukan dengan lebih elegan.
Bagaimana saya melakukannya:
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 terlihat jauh lebih baik ... thx.
Jadi pada prinsipnya saya berada di jalur yang benar. Orang lain?
Lalu saya ingin membuat daftar entitas dalam View, jadi saya harus mengurai kembali ke Array.
Anda bisa menyimpan array ID ketika array lebih nyaman untuk digunakan. Anda _perlu_ melakukan ini untuk hal-hal seperti penomoran halaman. Contoh real-world
di folder examples
melakukannya.
Komentar yang paling membantu
Saya pikir itu bisa dilakukan dengan lebih elegan.
Bagaimana saya melakukannya: