如何使用 normalizr 解析 FractalTransformer
Posted
技术标签:
【中文标题】如何使用 normalizr 解析 FractalTransformer【英文标题】:How to parse FractalTransformer with normalizr 【发布时间】:2020-11-27 22:34:10 【问题描述】:我正在尝试在来自 FractalTransformer 且其嵌套子级具有“数据”属性的 JSON 上使用 paularmstrong/normalizr。 JSON 示例:
"data":
"object": "Offer",
"id": "5g6aqocew4qjzl40",
"real_id": 26,
"name": "Random Name",
"created_at":
"date": "2019-06-18 11:13:08.000000",
"timezone_type": 3,
"timezone": "UTC"
,
"readable_created_at": "1 year ago",
"site":
"data":
"object": "Site",
"id": "65zody8vj29vlegd",
"name": "Test Site",
"real_id": 1
,
"countries":
"data": [
"object": "Country",
"code": "US",
"name": "United States"
,
"object": "Country",
"code": "DE",
"name": "Germany"
]
,
"meta":
"include": [
"site",
"countries"
],
"custom": []
我使用的架构:
export const offerSchema = new schema.Entity('offers')
export const siteSchema = new schema.Entity('sites', ,
processStrategy: (value) =>
return ...value.data
,
idAttribute: (value) =>
return value.data.id
,
)
export const countrySchema = new schema.Entity('countries')
offerSchema.define(
site: siteSchema,
countries: [countrySchema],
)
现在的问题是我从站点中删除了“数据”,因为它只是一个成功的对象,但在国家/地区的情况下我不能这样做。无论我尝试使用自定义 processStrategy 都失败了,因为国家是具有数组数据的对象(我认为这是问题所在,从实体到数组)。而在 idAttribute 函数中,我总是得到完整的数组,因此无法确定单个条目的 ID。所以最终的结果是国家的 ID 是未定义的。有什么好办法吗?
【问题讨论】:
【参考方案1】:我实际上是用另一种方法来管理的。我在父级上添加了 processStrategy,在这种情况下为“Offer”,因此所有“数据”部分在到达其他子架构之前都会被剥离。
const normalizrStripDataOptions =
processStrategy: (value) =>
const ret = ...value
Object.keys(ret).forEach((key) =>
if (ret[key] !== null)
if (ret[key].data && Array.isArray(ret[key].data))
ret[key] = [...ret[key].data]
if (ret[key].data && typeof ret[key].data === 'object')
ret[key] = ...ret[key].data
)
return ret
,
export const offerSchema = new schema.Entity('offers', , normalizrStripDataOptions)
export const siteSchema = new schema.Entity('sites')
export const countrySchema = new schema.Entity('countries')
offerSchema.define(
site: siteSchema,
countries: [countrySchema],
)
【讨论】:
以上是关于如何使用 normalizr 解析 FractalTransformer的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 normalizr 规范化来自 JSON 的数据?
如何使用“normalizr”规范化这个简单的 API 响应?
如何添加/删除使用 normalizr 生成的 redux 存储?