为啥非规范化不返回嵌套对象?
Posted
技术标签:
【中文标题】为啥非规范化不返回嵌套对象?【英文标题】:Why denormalize not return nested object?为什么非规范化不返回嵌套对象? 【发布时间】:2019-10-11 01:45:20 【问题描述】:我使用来自normalizr
包的denormalize
作为以下代码:
import normalize, schema, denormalize from 'normalizr';
const categoriesData = [
id: 1, name: 'category-1' ,
id: 2, name: 'category-2' ,
id: 3, name: 'category-3' ,
id: 40, name: 'category-40' ,
];
const subCategoriesData = [
id: 1, name: 'sub-category-a', category: 1 ,
id: 2, name: 'sub-category-b', category: 2 ,
id: 3, name: 'sub-category-c', category: 1 ,
id: 4, name: 'sub-category-d', category: 3 ,
id: 500, name: 'sub-category-e', category: 40 ,
]
const category = new schema.Entity('categories');
const categories = new schema.Array(category);
const subcategory = new schema.Entity('subCategories');
const subcategories = new schema.Array(subcategory);
const normalizedData = normalize(categoriesData, categories);
const denormalizedData = denormalize(normalizedData.result, categories, normalizedData.entities);
console.log( normalizedData );
console.log( denormalizedData );
const normalizedData2 = normalize(subCategoriesData, subcategories);
const denormalizedData2 = denormalize(normalizedData2.result, subcategories, normalizedData2.entities);
console.log( normalizedData2 );
console.log( denormalizedData2 );
denormalizedData2 的输出是
id: 1, name: "sub-category-a", category: 1,
...
而我期待的是:
id: 1, name: "sub-category-a", category: id: 1, name: 'category-1' ,
...
如何使用normalizr
实现目标?
【问题讨论】:
因为这里没有将categoriesData
带入denormalizedData2
的代码。
我编辑我的问题。
【参考方案1】:
老问题,但万一有人需要答案。 您的架构是错误的。 而不是
const subcategory = new schema.Entity('subCategories');
你应该写
const subcategory = new schema.Entity('subCategories', category: category );
这意味着子类别具有category
属性,由category
架构描述。
【讨论】:
以上是关于为啥非规范化不返回嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Symfony 2 序列化器对对象中的嵌套结构进行非规范化
在嵌套对象中使用firestore的FieldPath.documentId()