【发布时间】:2018-10-19 17:39:28
【问题描述】:
我正在尝试对来自 redux 状态的一些数据进行非规范化处理,但我无法让它工作。我已经尝试以我能想到的所有方式组合非规范化函数。这是一个猜谜游戏,到目前为止没有任何效果。
首先我将产品数据归一化并放入状态。
实体被放入state.data.products,包括产品。
state.data: {
products: {
products: {
9: {
id: 9
attributes: [ 10, 45, 23 ],
things: [23, 55, 77]
},
11 //etc
}
attributes: {
10: {
id: 10
},
45: //etc
},
things: { //etc
}
}
所以有一个属性“products”包含所有实体,而“products”实体还有另一个“products”。
标准化工作没有问题:
normalize(data, [productSchema]);
“productSchema”的定义如下:
productSchema = new schema.Entity('products', {
attributes: [attributeSchema],
things: [thingsSchema],
//+ other stuff
});
现在我想对一个产品进行非规范化,例如 9。
我在视图组件中使用“连接”来调用此函数以从状态中检索数据并对其进行非规范化:
export const denormalizeProduct = (state, productId) => {
const entities = state.data.products;
return denormalize(
productId,
[productSchema],
entities
);
}
如果我打电话给 denormalizeProductById(state, 9) ,我只会得到 9 回来。
(类似于 question ,但我无法从中找到解决方案,它将两个示例混合在一起)
如果我把“productSchema”不带数组:
return denormalize(
productId,
productSchema,
entities
);
我收到错误:TypeError: entities[schemaKey] is undefined。
我尝试过的所有操作都会导致“9”或上述错误。
编辑: 发现错误 - 在下面添加它
【问题讨论】:
-
它应该是不带括号的
productSchema,因为您没有对数组进行非规范化。重新选择的东西与问题有什么关系吗?如果没有,如果您在此处删除它会更清楚,而是添加所有代码以获得最小的完整示例(即剥离但完整定义entities和productSchema加上失败的denormalize调用)。 -
我去掉了重选功能,还是一样的问题。
标签: redux denormalization normalizr