Redux: Praktik terbaik menangani Entitas yang dinormalisasi?

Dibuat pada 19 Agu 2015  ·  3Komentar  ·  Sumber: reduxjs/redux

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)

question

Komentar yang paling membantu

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

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

wmertens picture wmertens  ·  4Komentar

olalonde picture olalonde  ·  3Komentar

mickeyreiss-visor picture mickeyreiss-visor  ·  3Komentar

benoneal picture benoneal  ·  3Komentar

captbaritone picture captbaritone  ·  3Komentar