【问题标题】:NGRX: Composing state when we have to represent data from two listsNGRX:当我们必须从两个列表中表示数据时组合状态
【发布时间】:2019-05-31 00:16:03
【问题描述】:

实际示例:考虑展开/折叠列表。每个项目扩展另一个列表。

export interface MainDomainList {
   id: number
   name: string;
}

export interface SubDomainList {
   id: number
   name: string;
}

export interface AppState {
    mainDomainList: MainDomainList[];
    subDomainList: SubDomainList[];
}

在 UI 上,列表应该这样表示:

MainDomainList[1]
   SubDomainList[] (entire list)
MainDomainList[2]
   Another SubDomainList[] (entire list)
etc..

当用户点击 MainDomain[n] 时,会调用后端返回 SubDomain[] 的列表。 两者之间没有任何联系。

似乎最复杂的部分是SubDomains在点击时不是一次全部加载,并且可以同时打开多个MainDomains 就像上面的例子一样。此外,应该可以轻松地对 subDomainList 实体执行 CRUD 操作。

我尝试使用一个选择器,它通过 id 从状态中选择一个项目,但每次状态都被覆盖。

我最初的想法是创建一个单独的状态,在成功加载 SubDomainList[] 之后,我可以通过调度“ADD”操作来添加加载的 SubDomainList[],从而添加实体和单击的 MainDomainList 的 id处于 newList 状态,因为用户在列表中单击时会获得如下内容:

exportt interface AppState {
    mainDomainList: MainDomainList[];
    subDomainList: SubDomainList[];
    newList: NewList[];
}


{

        mainDomainList : { 
          entities: {
            md1: {
              id: 'md1',
              name: '1'
            },
            md2: {
              id: 'md2',
              name: '2'
            }
          }
        },
        subDomainList : {
          entities : {
            sd1 : {
              id : 'sd1',
              name: 'name1'
            },
            sd2 : {
              id : 'sd2',
              name: 'name2'
            }
        },
        newList : {
            entities : {
                md1 : {
                  id : 'md1',
                  subDomainList: [{}, {}]
                },
                md2 : {
                  id : 'md2',
                  subDomainList: [{}, {}]
                }
            }
        }
}

然后我会以某种方式获取所有 newList 实体并在 UI 中将它们与 MainDomainList[n].id 的 id 匹配

我的方法是正确的还是有其他更好或更简单的解决方案来解决这个问题?

我对这个主题还很陌生,但我很头疼,试图弄清楚如何用 ngrx/Entity 实现它,但到目前为止失败了,尽管这应该是一个很常见的情况。任何帮助将不胜感激。

【问题讨论】:

    标签: ngrx ngrx-store ngrx-entity


    【解决方案1】:

    您可以通过传递主域列表来编写带参数的选择器

    参考:ngrx parameter to select functionhttps://blog.angularindepth.com/ngrx-parameterized-selector-e3f610529f8

    【讨论】:

    • 感谢日进的回答。我的理解是,当通过传递 id 使用选择器来选择商店状态时,每次用户单击该项目时,选择器都会清除并覆盖状态。当用户单击列表中的项目时,我不需要像 addOne 运算符这样增量并建立一个单独的状态吗?你能更具体地谈谈这个案子吗?将上述方法与 addOne 运算符一起使用是否错误?为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多