Redux: ¿Las mejores prácticas de manejo de entidades normalizadas?

Creado en 19 ago. 2015  ·  3Comentarios  ·  Fuente: reduxjs/redux

En mi primera aplicación con Redux, intento mantener mis colecciones normalizadas como se recomienda. De esta forma solo tienes que cambiar las Entidades en un lugar. (esto se siente bien para mí)

Al principio, normalicé con éxito mi matriz de datos a un objeto de entidades similar a una matriz con los ID como claves

Luego quise enumerar las entidades en una Vista, así que tuve que volver a analizarlas en una matriz. Además, si quiero filtrar mis Entidades, necesito el Array real. ¿Es este realmente el enfoque correcto?

Ejemplo con volver a seleccionar:

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

¿Es este realmente el enfoque correcto? (está funcionando bien, por lo que veo hasta ahora)

question

Comentario más útil

Creo que se puede hacer con más elegancia.
Cómo lo hago:

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

Todos 3 comentarios

Creo que se puede hacer con más elegancia.
Cómo lo hago:

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 se ve mucho mejor ... gracias.

Entonces, en principio, estoy en el camino correcto. ¿Nadie más?

Luego quise enumerar las entidades en una Vista, así que tuve que volver a analizarlas en una matriz.

Puede mantener una matriz de ID cuando sea más conveniente trabajar con las matrices. _Necesitarás_ hacer esto para cosas como la paginación. El real-world ejemplo en examples carpeta hace eso.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

vslinko picture vslinko  ·  3Comentarios

ramakay picture ramakay  ·  3Comentarios

benoneal picture benoneal  ·  3Comentarios

elado picture elado  ·  3Comentarios

vraa picture vraa  ·  3Comentarios