2017-01-24 5 views
1

私は完全なオブジェクトに戻す非正規化をしようとしています。私は文書hereに基づいてフォローしようとしています。私が理解したところでは、入力値は結果値の1つでなければならず、オブジェクトを再構築するためにスキーマとエンティティを提供します。しかし、返される値は、キーが0で入力値がオブジェクトです。 {0:44}のように、正規化されていないユーザーオブジェクトの代わりに使用できます。新しいNormalizrでエンティティを非正規化できません。3.1.0

userSchemas.js

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"} 
     } 
} 

EDIT非正規化

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 } 

:問題でを示しhttp://requirebin.comに貼り付けることができ要旨をコンソール

どちらの

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

あなたの最初の引数はちょうど2あるべきか、あなたの2番目の引数は[ user ]次のようになります。

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) 
+0

'this.props.users.entities'の値は何ですか?私はこれがあなたの問題がどこにあるのだろうと思う。 –

+0

私はthis.props.users.entitiesデータでOPを更新しました – DigitalDisaster

+0

エクスポートされたスキーマを 'denormalize([user]、...)'で渡している 'user'は正規化されているはずですスキーマではなく、スキーマではありません.2番目の引数だけがスキーマとみなされます。 –

答えて

3

この行は間違っています。

[編集]

また、normalizedUsersだけentitiesではなく、完全な正規化された結果である必要があります。 Use normalizedUsers.entities

+0

requirebinの例で修正をしようとすると、 'Uncaught TypeError:normalizrからこの行の' undefined'の '2 'のプロパティを読み取れません' var entity =(typeof entityOrId ==='定義されていない '?'未定義 ':_typeof(entityOrId))==='オブジェクト '? entityOrId:エンティティ[this.key] [entityOrId]; '。以前は同じ結果を出して自分のコードで推薦を試みました。私はなぜ提供されているエンティティリストでそのキーが見つからないのか分かりません。エンティティをconsole.logにすると明らかにそこにあります。 – DigitalDisaster

+1

編集済み...正規化された結果ではなく、エンティティオブジェクトのみを渡す必要があります。 –

+0

これは完璧です。あなたはチャンピオンです。私にこのことを固執してくれてありがとう。 – DigitalDisaster

関連する問題