私のバックエンドスキーマには、いくつかの異なるモデルがすべて多くのRequestsおよびRequest
が異なるモデルのいずれかに属しているような多形性の関連を使用するモデルRequest
があります。RelayJSおよびGraphQLでの多態性結合のフラグメントの作成
私は潜在的な親モデルのいずれかで使用できるようにしたい反応コンポーネント、RequestList
を持っています。
FooShowView.js
class FooShowView extends Component {
render() {
return (
<RequestList router={this.props.router} />
)
}
}
export default Relay.createContainer(ShowView, {
initialVariables: {
FooId: null
},
fragments: {
viewer: (variables) => {
return Relay.QL`
fragment on Viewer {
Foo(id: $FooId) {
id${ RequestList.getFragment('Foo') }
}
}`
`
}
}
});
RequestList.js
class RequestList extends Component {
renderRows =() => {
return this.props.requests.edges.map(edge => edge.node).map((intReq, i) => {
return (
<RequestRow
request={ intReq }
key={ i }
/>
);
});
}
render() {
return (
<Table>
{ this.renderRows() }
</Table>
);
}
};
export default Relay.createContainer(RequestList, {
fragments: {
foo:() => Relay.QL`
fragment on Foo {
requests(first: 10) {
edges {
node {
${ RequestRow.getFragment('request') }
}
}
}
}
`,
}
})
問題は今Request
の両親の別のもののためにRequestTableをレンダリングすることである。ここでは
BarShowView
で、
RequestList
に新しいフラグメントを追加する必要があります:
bar:() => Relay.QL`
fragment on Bar {
requests(first: 10) {
edges {
node {
${ RequestRow.getFragment('request') }
}
}
}
}
`,
Relayは、現在のビューに関係ない場合でも、barとfooの両方をリストに提供する必要があるという警告を吐き出します。
Request
は、スキーマ内で約8種類のモデルに関連付けられているため、すぐには不合理になります。
私が見ているレコードの多型子をレンダリングする再利用可能な反応コンポーネントを作成する正しい方法は何ですか?