Javascript 无法使用新的Normalizer 3.1.0对实体进行反规范化

Javascript 无法使用新的Normalizer 3.1.0对实体进行反规范化,javascript,normalizr,Javascript,Normalizr,我正在尝试将一个用户反规范化为一个完整的对象。我正试着根据文件来做。据我所知,输入应该是结果值之一,然后提供模式和实体以处理重建对象的过程。不过,返回的值是一个具有键0和输入值的对象{0:44},而不是整个非规范化的用户对象 userSchemas.js import { schema } from 'normalizr'; const photos = new schema.Entity('photos') const phones = new schema.Entity('phones')

我正在尝试将一个用户反规范化为一个完整的对象。我正试着根据文件来做。据我所知,输入应该是结果值之一,然后提供模式和实体以处理重建对象的过程。不过,返回的值是一个具有键0和输入值的对象<例如,代码>{0:44},而不是整个非规范化的用户对象

userSchemas.js

import { schema } from 'normalizr';

const photos = new schema.Entity('photos')
const phones = new schema.Entity('phones')
const user = new schema.Entity('users', {
    photos: [photos],
    phones: [phones]
})

const usersSchema = new schema.Array(users)

export { usersSchema, user as userSchema }
非规范化

denormalize([user], userSchema, this.props.users.entities)
this.props.users.entities

{
users : { 
         1: {id:1, name: "john", phones:[2]}
        },
photos : {},
phones : {
          2: {id:2, phone: "34234324"}
         }
}
编辑:可以粘贴到控制台中显示问题的要点

var normalizr = require("normalizr")

const photos = new normalizr.schema.Entity('photos')
const phones = new normalizr.schema.Entity('phones')
const user = new normalizr.schema.Entity('user', {
    photos: [photos],
    phones: [phones]
})

const usersSchema = new normalizr.schema.Array(user)

var users = [
  {id: 1, name: "bob", phones: [{id:3, phone: 45234324},{id:4, phone: 42342432}]},
    {id: 2, name: "will", phones: [{id:3, phone: 45234324},{id:6, phone: 5435345}]},
    {id: 4, name: "sam", phones: [{id:6, phone: 5345353},{id:7, phone: 42342432}]}
]

var normalizedUsers = normalizr.normalize(users, usersSchema)

var denormalizedUser = normalizr.denormalize([2], user, normalizedUsers)

console.log(denormalizedUser)
这一行是错误的:

var denormalizedUser = normalizr.denormalize([2], user, normalizedUsers)
第一个参数应该是
2
,或者第二个参数应该是
[user]

[编辑]


另外,
normalizedUsers
应该只是
实体,而不是完整的规范化结果。使用
normalizedUsers.entities

此.props.users.entities的值是多少?我怀疑这可能就是您的问题所在。我已经用this.props.users.entities数据更新了OP,即您传入的
用户
反规范化([user],…
导出的模式?因为这应该是一个规范化用户,而不是一个模式。只有第二个参数应该是一个模式。因此,这可能是问题的一部分。我认为您可以将实体的id/键作为
输入来传递,而不是整个对象双对象还是总是需要数组?我只想对单个用户实体进行反规范化。实体的ID应该可以工作。我的问题是:
反规范化([user],…
。如果没有这些,这个问题就无法回答。当我在requirebin示例中尝试您的修改时,它会导致
未捕获的TypeError:无法从normalizer
var entity=(typeof entityOrId=='undefined'?'undefined':\u typeof(entityOrId))读取此行上未定义的属性'2'=='object'?entityOrId:entities[this.key][entityOrId];
。我以前在我自己的代码中尝试过你的建议,但结果相同。我不确定为什么它在提供的实体列表中找不到该键,当我控制台时它就在那里。记录实体。编辑…你只需要传递实体对象,而不是标准化结果。哦,天哪,这太完美了。你就是冠军。谢谢你在这件事上跟我开玩笑。