我的後端架構有一個模型Request
,它使用多態關聯,使得幾個不同的模型都具有許多請求和一個Request
可以屬於這些不同模型中的任何一個。爲RelayJS和GraphQL中的多形關聯編寫片段
我有一個React組件,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') }
}
}
}
}
`,
}
})
的問題是,現在呈現RequestTable爲Request
的父母的一個又一個,在BarShowView
中說,我需要添加一個新的片段到RequestList
:
bar:() => Relay.QL`
fragment on Bar {
requests(first: 10) {
edges {
node {
${ RequestRow.getFragment('request') }
}
}
}
}
`,
然後Relay會吐出警告,我需要提供bar和foo作爲道具給我的List,即使它與當前視圖無關。
由於Request
與我架構中的大概8種不同的模型相關,這很快就會變得不合理。
創建可重用的反應組件的正確方法是什麼,它將呈現我正在查看的任何記錄的多態子項?