Я ищу хороший синтаксис для передачи переменной из родительского контейнера в дочерний контейнер.
Допустим, у меня есть эти маршруты с глобальным списком виджетов на /
и конкретными списками виджетов на /widgets/:WidgetListID
.
Примечание. Я использую react-router-relay
<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
из родительского контейнера в дочерний контейнер?