私は非常に標準的な入れ子JSON応答を持っています。 プロジェクトには多くのダッシュボードがあります。 ダッシュボード多くの図表があります。Normalizrを使用して、ネストされた基本JSONを処理するにはどうすればよいですか?
私のスキーマを定義して使用する正しい方法は何ですか?
以下は、私のSchemas.js、私のAPIレスポンス、NormalizrがAPI応答を変換するコードです。
Schemas.js:
import { Schema, arrayOf, normalize } from 'normalizr';
// Create a schema for each model.
const project = new Schema('projects');
const dashboard = new Schema('dashboard');
const chart = new Schema('chart');
// Projects have many dashboards.
project.define({
dashboards: arrayOf(dashboard)
});
// Dashboards have many charts.
dashboard.define({
charts: arrayOf(chart)
});
export const Schemas = { project, dashboard, chart };
マイAPIレスポンス:
{
projects: [{
id: 1,
name: "Project 1",
dashboards: [{
id: 1,
name: "Dashboard 1",
charts: [{
id: 1,
name: "Chart 1"
},
{
id: 2,
name: "Chart 2"
}]
},
{
id: 2,
name: "Dashboard 2",
charts: [{
id: 3,
name: "Chart 3"
},
{
id: 4,
name: "Chart 4"
}]
}]
},
{
id: 2,
name: "Project 2",
dashboards: [{
id: 3,
name: "Dashboard",
charts: []
}]
}]
}
私はnormalize(response, Schemas.project);
を行うアクションでこのJSONを受けます。これは応答全体をentities.projects.undefined
に移動するようです。
{
entities: {
projects: {
undefined: {
projects: [{
id: 1,
name: "Project 1",
...
}, ...]
}
}
},
result: undefined
}
正しくこのスキーマを定義して使用する必要がありますか?
参考文献:
https://github.com/gaearon/normalizr
https://github.com/reactjs/redux/blob/master/examples/real-world/actions/index.js
私はこのキーがプロジェクトと呼ばれることを事前に知らなかった場合、同じことを達成する方法はありますか?これはカテゴリごとにグループ化されたレポートのリストであるとします。そのため、プロジェクトの代わりにカテゴリの名前とレポートのオブジェクトの配列があります。 –
あなたはおそらく、あなたのAPIを少し違って構成する方が良いでしょう。たとえば、「名前」と「レポート」を持つ2つのキーのように。 – bryanph
ええ、それは結局それをしました。 APIのレスポンス側でのグループ化は、その後の生産性の低下ではないことがわかりました。 –