2017-01-19 2 views
0

normalizrバージョン3.1.xに更新しましたので、私は非正規化を利用できます。彼らはAPIを大幅に変更しましたが。私はスキーマを転送するのに問題があります。Normalizr v2からv3にスキーマを変換する際に問題が発生しました

import { normalize, Schema, arrayOf, valuesOf } from 'normalizr'; 

const usersSchema = new Schema('users') 
const photosSchema = new Schema('photos') 
const phonesSchema = new Schema('phones') 

photosSchema.define({ 
    users: arrayOf(usersSchema) 
}) 

phonesSchema.define({ 
    users: arrayOf(usersSchema) 
}) 

usersSchema.define({ 
    photos: valuesOf(photosSchema), 
    phones: valuesOf(phonesSchema) 
}) 

これはユーザー向けの既存のスキーマでした。私も自分のReduxのアクション内redux-normalizr middlewareを使用していたので、私はこのような自分の行動にスキーマを接続:

import { usersSchema } from '../normalizrSchemas/usersSchemas.js' 
import { arrayOf } from 'normalizr' 

export function getUsers(data) { 
    return { 
    type: 'GET_USERS', 
    payload: data, 
    meta: { 
     schema : arrayOf(usersSchema) 
    } 
    } 
} 

これは、スキーマを超える変換するための私の最初の試みでした。 arrayOfと同じ方法でschema.Arrayを呼び出すことはできないようですので、配列呼び出しをスキーマに移動する必要があると思いました。

import { schema } from 'normalizr'; 

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

const users= new schema.Array('users', user) 

export { users } 

アクションは同じですが、arrayOfでスキーマを折り返して削除しました。すべてのユーザーデータが正規化されずに結果にダンプされるだけです。データはユーザーオブジェクトのリストであり、各オブジェクトにはnormalizrがピックアップするIDが含まれています。私は正規の人に、それが私が考えるオブジェクトの配列であることを確認する方法を理解するのに苦労しています。

答えて

2

schema.Arrayは、キーストリング名(docs)を受け入れません。最初の引数はスキーマ定義でなければなりません。あなただけの単一のエンティティ型の配列のための速記を使用することができ、

const users = new schema.Array(user) 

をまたは::

const users = [ user ]; 
+0

HMMをだからではなく、

const users= new schema.Array('users', user) 

のあなたは使用する必要があります。 'index.js:179 Uncaught Error:Normalizeがスキーマのオブジェクトを受け付けます.'というメッセージが表示されます。それは長い形式の新しいスキーマ.Array(プロバイダ)を受け入れました。しかし、ユーザーオブジェクトはすべて結果配列にまだダンプされており、エンティティは空です。私は写真と電話を取り除くことで自分のコードを単純化するのに疲れました。たぶん私は文書のいくつかの詳細を見つけるでしょう – DigitalDisaster

+0

それはちょうどredux-normalizrがバージョン3と互換性がないかもしれないように見えます。スキーマで私の減速機で 'normalize'を使うときはうまくいきます。ミドルウェアを取り除かなければならないのは残念ですが、ノーマライザv3を使用することに興奮しています!ありがとうございました! – DigitalDisaster

関連する問題