Normalizr - 在结果中设置嵌套响应的键
Normalizr - Setting key of nested responses in results
我在规范器 examples 中看到它们在结果对象上返回了一个名称 属性 "users":
{
result: { users: [ 1, 2 ] },
entities: {
users: {
'1': { id: 1 },
'2': { id: 2 }
}
}
}
我似乎无法弄清楚如何使用我收到的嵌套 api 响应来执行此操作。我有一个用户和一个地址缩减器,我正在尝试将规范化响应的结果传递给它。
我有一个 JSON 回复,看起来像这样:
[
{
id: 1
first_name: First,
last_name: Last,
address: {
data: [
{
id: 1,
address_one: '123 Street Ave',
address_two: '',
city: 'Some City',
state: 'CA',
zip: '1234'
}
]
}
},
{
id: 1
first_name: First,
last_name: Last,
address: {
data: [
{
id: 2,
address_one: '123 Street Ave',
address_two: '',
city: 'Some City',
state: 'CA',
zip: '1234'
},
{
id: 3,
address_one: '321 Avenue Road',
address_two: 'Suite 101',
city: 'Some City',
state: 'CA',
zip: '1234'
}
]
}
}
]
我的架构如下所示:
import { schema } from 'normalizr'
/**
* Addresses
*/
const address = new schema.Entity('addresses');
const arrayOfAddresses = new schema.Array(address);
/**
* User
*/
export const user = new schema.Entity('users', {
addresses: arrayOfAddresses
});
user.define({
addresses: {
data: arrayOfAddresses
}
})
export const arrayOfUsers = new schema.Array(user)
正在做:let result = normalize(data, schema.arrayOfUseres)
returns:
{
entities: {
addresses: /* The address data */
users: /* The users with an array of the address ids attached to them*/
},
result: [1, 2]
}
我真正想要的是包含用户和地址的结果对象:
{
entities: {
addresses: /* The address data */
users: /* The users with an array of the address ids attached to them */
},
result: {
addresses: [1, 2, 3]
users: [1, 2]
}
}
这可能吗?我尝试了
的几种变体
import * as schema from './schema'
normalize(data, { users: [schema.user], addresses: [schema.address] }
但这只是出错,returns 我的数据返回到结果对象中。
Is this possible?
没有。 result
值始终设置为匹配每个架构的输入数据的顶级结构。如果你输入的数据没有一级键addresses
,那是不可能的。
我在规范器 examples 中看到它们在结果对象上返回了一个名称 属性 "users":
{
result: { users: [ 1, 2 ] },
entities: {
users: {
'1': { id: 1 },
'2': { id: 2 }
}
}
}
我似乎无法弄清楚如何使用我收到的嵌套 api 响应来执行此操作。我有一个用户和一个地址缩减器,我正在尝试将规范化响应的结果传递给它。
我有一个 JSON 回复,看起来像这样:
[
{
id: 1
first_name: First,
last_name: Last,
address: {
data: [
{
id: 1,
address_one: '123 Street Ave',
address_two: '',
city: 'Some City',
state: 'CA',
zip: '1234'
}
]
}
},
{
id: 1
first_name: First,
last_name: Last,
address: {
data: [
{
id: 2,
address_one: '123 Street Ave',
address_two: '',
city: 'Some City',
state: 'CA',
zip: '1234'
},
{
id: 3,
address_one: '321 Avenue Road',
address_two: 'Suite 101',
city: 'Some City',
state: 'CA',
zip: '1234'
}
]
}
}
]
我的架构如下所示:
import { schema } from 'normalizr'
/**
* Addresses
*/
const address = new schema.Entity('addresses');
const arrayOfAddresses = new schema.Array(address);
/**
* User
*/
export const user = new schema.Entity('users', {
addresses: arrayOfAddresses
});
user.define({
addresses: {
data: arrayOfAddresses
}
})
export const arrayOfUsers = new schema.Array(user)
正在做:let result = normalize(data, schema.arrayOfUseres)
returns:
{
entities: {
addresses: /* The address data */
users: /* The users with an array of the address ids attached to them*/
},
result: [1, 2]
}
我真正想要的是包含用户和地址的结果对象:
{
entities: {
addresses: /* The address data */
users: /* The users with an array of the address ids attached to them */
},
result: {
addresses: [1, 2, 3]
users: [1, 2]
}
}
这可能吗?我尝试了
的几种变体import * as schema from './schema'
normalize(data, { users: [schema.user], addresses: [schema.address] }
但这只是出错,returns 我的数据返回到结果对象中。
Is this possible?
没有。 result
值始终设置为匹配每个架构的输入数据的顶级结构。如果你输入的数据没有一级键addresses
,那是不可能的。