في أول تطبيق لي مع Redux ، أحاول الحفاظ على تطبيع مجموعاتي على النحو الموصى به. بهذه الطريقة ، ما عليك سوى تغيير الكيانات في مكان واحد. (هذا شعور صحيح بالنسبة لي)
في البداية ، نجحت في تطبيع صفيفي من البيانات إلى Array-like-Object of Entities مع المعرّف كمفتاح
ثم أردت سرد الكيانات في طريقة عرض ، لذلك اضطررت إلى تحليلها مرة أخرى إلى مصفوفة. أيضًا إذا كنت أرغب في تصفية الكيانات الخاصة بي ، فأنا بحاجة إلى المصفوفة الحقيقية. هل هذا حقا هو النهج الصحيح؟
مثال مع إعادة التحديد:
// 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])
);
Ismepetrov يبدو أفضل بكثير ... شكرا.
لذا من حيث المبدأ أنا على الطريق الصحيح. أي شخص آخر؟
ثم أردت سرد الكيانات في طريقة عرض ، لذلك اضطررت إلى تحليلها مرة أخرى إلى مصفوفة.
يمكنك الاحتفاظ بمصفوفة من المعرفات عندما تكون المصفوفات أكثر ملاءمة للعمل معها. ستحتاج إلى القيام بذلك لأشياء مثل ترقيم الصفحات. و real-world
المثال في examples
مجلد يفعل ذلك.
التعليق الأكثر فائدة
أعتقد أنه يمكن القيام به بشكل أكثر أناقة.
كيف أفعل ذلك: