2017-01-07 10 views
1

私はAPIから受け取った応答を正規化したいと思います。典型的な応答は次のようになります。normalizr v3とJSON api

// Get all projects 
{data:[ 
    { 
     id: 1 
     ... 
     team:{ 
      data: { 
       id:15 
       ... 
      } 

     } 
    }, 
    { 
     id:2, 
     .... 
    }, 
    { 
     id:3, 
     ... 
    } 
]} 

「データ」コンテナを削除するにはどうすればよいですか? は現在、私のスキーマは次のようになります。

export const project = new schema.Entity('projects', { 
    team: team, // team omitted 
}, 
{ 
    processStrategy: (value, parent, key) => parent.data 
} 
) 

export const arrayOfProjects = new schema.Array(project) 

そして、私はそれが好きで使用しています:

const normalizedProjects = normalize(jsonResponse, arrayOfProjects) 

normalizedProjectsがはその後、次のようになります。

{ 
    entities:{ 
     projects:{ 
      undefined:{ 
       0:{ 
        team:{ 
         data:{ 
          id:15, 
          ... 
         } 
        } 
       }, 
       1:{...}, 
       2:{...}. 
       ... 
       50:{...}, 
      } 
     } 
    }, 
    result:[] // length is 0 
} 

私がなぜわかりませんプロジェクトのリストは 'undefined'にも含まれていますか?

答えて

0

あなたは省略data(または何か他のfundamentalyl を変更)したいあなたエンティティー・スキーマのそれぞれは、あなたが任意のデータを削除したり変更する書き込みprocessStrategyを含める必要があります。 (testsの例を参照)

+0

先端ためのおかげで、私は今ことを試してみましたが、私はprocessStrategyのように見えるprocessStrategy機能、から戻っていますどんな「未定義の」オブジェクトの子育てを削除するために何かをするように見えることはできません:(値、 parent、key)=> parent.data; 何が原因である可能性がありますか? – Adam

+0

コードを表示することができれば、何をしているのかははっきりしているかもしれません。 –

+0

元の質問を編集して、データを細くし、プロセス戦略のために何をしているのかを示します。 – Adam

1

また、json_apiスキーマも使用しています。 これはどうですか。

const projectsSchema = new schema.Entity('projects', {}, { 
    processStrategy: processStrategy 
}); 

export const processStrategy = (value, parent, key) => { 
    const attr = value.attributes; 
    delete value.attributes; 
    return { ...value, ...attr }; 
}; 

export const fetchProjectsSchema = { 
    data: [projectsSchema] 
}