我的api当前回复如下:
[
{
"device_id": "1234",
"network_status": "Offline",
"status": "Yes",
"frequency": 50,
},
{
"device_id": "12345",
"network_status": "online",
"status": "no",
"frequency": 123,
},
{
"device_id": "12346",
"network_status": "online",
"status": "no",
"frequency": 423,
},
]
使用最新文档:https://github.com/paularmstrong/normalizr/blob/master/docs/api.md#arraydefinition-schemaattribute
我知道这些文档已经更新,所以在堆栈上查看其他问题我还没有找到类似的例子 . 'responseData'包含来自api的响应,api是一个对象数组 . [{},{},...]
我的代码是
import { schema } from 'normalizr';
const deviceid = new schema.Entity('device_id');
const arrayOfDevices = new schema.Array({
device_id : deviceid,
})
normalize(responseData, arrayOfDevices)
我想获得以下输出 . 具有device_id作为每个对象的键的实体对象 .
{
entities: {
device_id: {
'1234' : {
.....
},
'12345' : {
.....
} ,
'123456' : {
.....
}
}
},
result: [
['1234','12345','123456'],
]
}
但是,我似乎只是通过一个空实体获得以下响应,其他所有内容都被推送到结果中
{
entities: {},
result: [
{
"device_id": "1234",
"network_status": "Offline",
"status": "Yes",
"frequency": 50,
},
{
"device_id": "12345",
"network_status": "online",
"status": "no",
"frequency": 123,
},
{
"device_id": "12346",
"network_status": "online",
"status": "no",
"frequency": 423,
},
]
}
我的normalizr代码似乎缺少什么?
1 回答
Normalizr希望您的实体拥有
id
道具 . 如果包含id的字段具有其他名称,则必须明确定义它:Output:
还要与normalizr docs中的this example进行比较 .
我建议不要将id字段命名为
device_id
,因为如果您正确命名保存实体的变量,这通常是多余的 . 如果你是有一个设备数组,你应该命名为devices
. 然后很明显,里面对象的id
字段是设备ID . 无需在属性名称中重复此操作 .