我正在尋找一個良好的語法來從父容器傳遞一個變量到一個子容器。如何通過繼電器容器之間的變量
比方說,我有這些路線,在/
上有一個全局窗口小部件列表,在/widgets/:WidgetListID
上有一個特定的窗口小部件列表。
注:我用的反應路由器中繼
<Route
path='/' component={Layout}
>
<IndexRoute
component={WidgetListContainer}
queries={ViewerQueries}
/>
<Route
path='/widgets/:WidgetListID'
component={WidgetListContainer}
queries={ViewerQueries}
/>
</Route>
它是相同的<WidgetList/>
成分,呈現內<WidgetListContainer/>
內<Layout/>
這裏是我嘗試通過WidgetListID
變量:
Layout.js
class Layout extends React.Component {
render() {
return (
<div>
...
{children}
...
</div>
);
}
}
個
WidgetListContainer.js
class WidgetListContainer extends React.Component {
render() {
return (
<div>
...
<WidgetList
viewer={viewer}
/>
</div>
)
}
}
export default Relay.createContainer(WidgetListContainer, {
initialVariables: {
WidgetListID: null
},
fragments: {
viewer: ($WidgetListID) => Relay.QL`
fragment on User {
${WidgetList.getFragment('viewer', $WidgetListID)}
}
`,
},
})
WidgetList.js
class WidgetList extends React.Component {
render() {
return (
<div>
<ul>
{viewer.widgets.edges.map(edge =>
<li key={edge.node.id}>{edge.node.widget.name}</li>
)}
</ul>
</div>
)
}
}
export default Relay.createContainer(WidgetList, {
initialVariables: {
WidgetListID: null
},
fragments: {
viewer:() => Relay.QL`
fragment on User {
widgets(first: 10, WidgetListID:$WidgetListID) {
edges {
node {
id,
name
}
}
}
}
`,
},
})
我沒有問題,直接設置WidgetListID
變量的widgetList繼電器容器內,它只要工作完全正常,但我嘗試從WidgetListContainer中繼容器傳遞它,我有一個空的數據對象{__dataID__: "VXNlcjo="}
。雖然,這個變量在我的getWidget()函數中打印得很好。所以有些事情在某些時候不起作用,但我無法弄清楚什麼?
將父容器的WidgetListID
變量傳遞給子容器的良好語法是什麼?
謝謝你的回答!我想我又錯過了一些東西,現在我有一個錯誤:''WidgetList'中的'RelayFragmentReference:Variable'WidgetListID'未定義。 – Victorien
對不起,我在getFragment調用中犯了一個錯誤;你還需要傳遞'route'。所以,它應該是'WidgetList.getFragment('viewer',route,{WidgetListID})'。我更新了答案,所以希望這次能夠運行:) – sefnap
嗯......我很抱歉,但看起來我的回答不正確。畢竟,它沒有像我期望的那樣工作。 :( – sefnap