Redux: أفضل ممارسة للتعامل مع الكيانات التي تم تطبيعها؟

تم إنشاؤها على ١٩ أغسطس ٢٠١٥  ·  3تعليقات  ·  مصدر: reduxjs/redux

في أول تطبيق لي مع 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)
     );

هل هذا حقا هو النهج الصحيح؟ (إنها تعمل بشكل جيد ، من ما أراه حتى الآن)

question

التعليق الأكثر فائدة

أعتقد أنه يمكن القيام به بشكل أكثر أناقة.
كيف أفعل ذلك:

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])
);

ال 3 كومينتر

أعتقد أنه يمكن القيام به بشكل أكثر أناقة.
كيف أفعل ذلك:

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 مجلد يفعل ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات