親コンテナから子コンテナに変数を渡すための良い構文を探しています。リレーコンテナ間で変数を渡す方法
グローバルルートのウィジェットリストが/
であり、特定のウィジェットリストが/widgets/:WidgetListID
であるとします。
注:私は
<Route
path='/' component={Layout}
>
<IndexRoute
component={WidgetListContainer}
queries={ViewerQueries}
/>
<Route
path='/widgets/:WidgetListID'
component={WidgetListContainer}
queries={ViewerQueries}
/>
</Route>
反応-ルータリレーを使用することが<Layout/>
内<WidgetListContainer/>
内にレンダリング同じ<WidgetList/>
コンポーネント、だとここで私は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
}
}
}
}
`,
},
})
私はWidgetListリレーコンテナ内に直接WidgetListID
変数を設定する問題はありません、それはできるだけ早く完全に正常に動作しますが、私は空のデータオブジェクト{__dataID__: "VXNlcjo="}
を持っているWidgetListContainerリレーコンテナから渡そうとします。しかし、変数は私のgetWidget()関数でうまく表示されます。だから、何かがうまくいかないのですが、何が分かりませんか?
WidgetListID
変数を親コンテナから子コンテナに渡すには、どのような構文が良いでしょうか? WidgetListContainer
で
ありがとうございました!私は何かをもう一度見逃していると思う、私は今エラーがあります: 'RelayFragmentReference:変数 'WidgetListID'はフラグメント 'WidgetList'で定義されていません。 – Victorien
申し訳ございません。私はgetFragment呼び出しで間違いを犯しました。 'route'も渡す必要があります。だから、 'WidgetList.getFragment( 'viewer'、route、{WidgetListID})'でなければなりません。私は答えを更新しましたので、うまくいけば今度はうまくいくでしょう:) – sefnap
うーん...申し訳ありませんが、私の答えが間違っているようです。結局私が期待したようにうまくいかない。 :( – sefnap