我有一個包含許多子組件作爲數組的父組件。每個子組件都包含大量的數據。所以,我決定在Parent加載時不加載它們。從父容器取出的數據如下:是否可以在Relay中進行延遲加載?
{
...
childs: [childId1, childId2, ...] // Array of child id
...
}
然後,我想通過將孩子的id設置爲後端的API送每個孩子一個請求。每當數據恢復時,每個孩子都將顯示在用戶界面上,否則將顯示一個微調圖標以指示加載數據。
是否有可能在Relay中實現這一點?
更新:
這裏是選項1的示例:
兒童容器:
export default Relay.createContainer(Child, {
initialVariables: {
id: null,
hasQuery: false
},
fragments: {
viewer:() => Relay.QL`
fragment on Viewer {
child(id: $id) @include(if: $hasQuery) {
...
}
}
`,
},
});
兒童組件:
const Child = React.createClass({
componentWillMount() {
ChildContainer.setVariables({ id: this.props.childId, hasQuery: true });
}
});
父容器:
export default Relay.createContainer(Parent, {
fragments: {
viewer:() => Relay.QL`
fragment on Viewer {
childIds // Return an array of child's id
Child.getFragment('viewer')
}
`,
},
});
父組件:
const Parent = React.createClass({
render() {
this.props.viewer.childIds.map(childId => {
<Child childId={childId} />
});
}
});
的問題是,當每個孩子得了渲染,它獲取它的數據,取而代之的是它自己的數據的最後一個子數據。例如,如果childIds = [1,2,3],它將在屏幕上顯示3次3的數據; 3 3 3
感謝您的回覆。我使用'Relay.Renderer'工作。仍然不太確定第一個選項。它似乎與一個正常的對象一起工作,如[答案](http://stackoverflow.com/questions/34346273/search-functionality-using-relay)中所述,但不適用於數組。 – lvarayut
回答原來的評論:嵌套'RelayRenderer'沒有引用任何特殊的中繼。這意味着頂級'RelayRenderer'將呈現包含另一個'RelayRenderer'的內容(就像React組件可以呈現純HTML元素*或其他React組件)。 如果您使用選項1,請注意'@ include'和'@ skip'帶有* boolean *參數,所以在技術上數組或對象將是無效的。如果這不是你所指的,最好用你正在使用的代碼來修改問題。 –
感謝您的澄清,我更新了問題以模擬我用選項1嘗試過的內容。當父節點通過childIds數組循環並呈現每個Child時,每個Child都成功獲取自己的數據。但是,在屏幕上,它總是多次顯示最後一個子數據。 – lvarayut