normalizr schema - 子引用父级

时间:2017-03-30 15:10:48

标签: javascript normalizr

尝试掌握如下所示的normalizr,数据结构和架构:

const data = {
    "name": "abc",
    "outlet": [
        {
            "id": 1,
            "retailer": {
                "id": 1
            }
        },
        {
            "id": 2,
            "retailer": {
                "id": 1
            }
        }
    ]
}

const retailerSchema = new schema.Entity('retailers');

const outletSchema = new schema.Entity('outlets', {
    retailer: retailerSchema
});

const normalized = normalize(data, {
    retailers: [retailerSchema],
    outlets: [outletSchema]
})

目前的结果:

normalized.result == {name: "abc", outlets: [1, 2]}
normalized.entities.retailers == {1: {id: 1}}
normalized.entities.outlets == {1: {id: 1, retailer: 1}, 2: {id: 2, retailer: 1}}

是否可以根据独特的零售商添加插座参考? e.g。

normalized.result == {name: "abc", outlets: [1, 2], retailers: [1]}
normalized.entities.retailers == {1: {id: 1, outlets: [1, 2]}}
normalized.entities.outlets == {1: {id: 1, retailer: 1}, 2: {id: 2, retailer: 1}}

1 个答案:

答案 0 :(得分:0)

  

是否可以根据独特的零售商添加插座参考?

不是真的。 Normalizr返回的result始终采用与输入数据相同的格式。由于您的数据为{ name, outlet },因此这些是result输出中唯一存在的密钥。

如果您在顶级对象(整个data结构)上有唯一标识符,则可以使用processStrategy schema.Entity并随机播放内容,但这样做真的不推荐。