Redux: 处理规范化实体的最佳实践?

创建于 2015-08-19  ·  3评论  ·  资料来源: reduxjs/redux

在我的第一个带有Redux的应用程序中,我试图按照建议将收藏集标准化。 这样,您只需要在一个地方更改实体即可。 (这对我来说是正确的)

最初,我成功地将数据数组标准化为实体的类数组对象,其中id为键

然后,我想在视图中列出实体,因此我不得不将其解析回数组。 另外,如果我想过滤我的实体,我需要真正的阵列。 这真的是正确的方法吗?

重新选择示例:

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

@itsmepetrov看起来好多了……谢谢。

因此,原则上我是正确的。 其他人?

然后,我想在视图中列出实体,因此我不得不将其解析回数组。

当使用数组更方便时,可以保留一个ID数组。 您需要针对分页等操作。 examples文件夹中的real-world示例可以做到这一点。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

dmitry-zaets picture dmitry-zaets  ·  3评论

jbri7357 picture jbri7357  ·  3评论

vraa picture vraa  ·  3评论

benoneal picture benoneal  ·  3评论

amorphius picture amorphius  ·  3评论