如何使用变量组合查询片段
How can I compose query fragments with variables
我正在使用 Relay 和 react-router-relay
并尝试组合多个 Relay 容器。内部容器需要一个查询片段变量,该变量必须从路由器向下传递到其父容器。它没有得到这个变量。
代码如下所示:
// A "viewer":
const UserQueries = { user: () => Relay.QL`query { user }` };
// A route to compose a message:
<Route
path='/compose/:id'
component={ ComposeContainer }
queries={ UserQueries }
/>
// A container:
const ComposeContainer = Relay.createContainer(
Compose,
{
initialVariables: {
id: null
},
fragments: {
user: () => Relay.QL`
fragment on User {
${ BodyContainer.getFragment('user') }
// other fragments
}
`
}
}
);
// And the composed container:
const BodyContainer = React.createContainer(
Body,
{
initialVariables: {
id: null
},
fragments: {
user: () => Relay.QL`
fragment on User {
draft(id: $id) {
// fields
}
}
`
}
}
);
BodyContainer
中的草稿字段永远不会从路由参数中获取 $id
。 RelayContainer.getFragment()
的签名中的参数似乎可以让您传递参数和变量,但我不确定应该如何使用它。
您在 <ComposeContainer>
上的 user
片段必须类似于:
user: ({ id }) => Relay.QL`
fragment on User {
${BodyContainer.getFragment('user', { id })}
// other fragments
}
`
此外,当您从 <ComposeContainer>
编写 <BodyContainer>
时。您还需要传入 id
作为道具,例如
<BodyContainer id={this.props.id} />
另请参阅 https://github.com/facebook/relay/issues/309 上的其他讨论。
我正在使用 Relay 和 react-router-relay
并尝试组合多个 Relay 容器。内部容器需要一个查询片段变量,该变量必须从路由器向下传递到其父容器。它没有得到这个变量。
代码如下所示:
// A "viewer":
const UserQueries = { user: () => Relay.QL`query { user }` };
// A route to compose a message:
<Route
path='/compose/:id'
component={ ComposeContainer }
queries={ UserQueries }
/>
// A container:
const ComposeContainer = Relay.createContainer(
Compose,
{
initialVariables: {
id: null
},
fragments: {
user: () => Relay.QL`
fragment on User {
${ BodyContainer.getFragment('user') }
// other fragments
}
`
}
}
);
// And the composed container:
const BodyContainer = React.createContainer(
Body,
{
initialVariables: {
id: null
},
fragments: {
user: () => Relay.QL`
fragment on User {
draft(id: $id) {
// fields
}
}
`
}
}
);
BodyContainer
中的草稿字段永远不会从路由参数中获取 $id
。 RelayContainer.getFragment()
的签名中的参数似乎可以让您传递参数和变量,但我不确定应该如何使用它。
您在 <ComposeContainer>
上的 user
片段必须类似于:
user: ({ id }) => Relay.QL`
fragment on User {
${BodyContainer.getFragment('user', { id })}
// other fragments
}
`
此外,当您从 <ComposeContainer>
编写 <BodyContainer>
时。您还需要传入 id
作为道具,例如
<BodyContainer id={this.props.id} />
另请参阅 https://github.com/facebook/relay/issues/309 上的其他讨论。