aft*_*lee 14 apollo graphql react-apollo graphcool apollo-client
我正在使用Apollo Client作为前端,使用Graphcool作为后端.有两个查询firstQuery
和secondQuery
我希望他们在序列页面打开时调用.下面是示例代码(此处未列出TestPage组件的定义):
export default compose(
graphql(firstQuery, {
name: 'firstQuery'
}),
graphql(secondQuery, {
name: 'secondQuery' ,
options: (ownProps) => ({
variables: {
var1: *getValueFromFirstQuery*
}
})
})
)(withRouter(TestPage))
Run Code Online (Sandbox Code Playgroud)
我需要var1
在secondQuery
从的结果firstQuery
.我如何使用Apollo Client和编写?或者还有其他方法吗?提前致谢.
Dan*_*den 37
您的firstQuery
组件添加的道具将可用于下面(内部)组件,因此您可以执行以下操作:
export default compose(
graphql(firstQuery, {
name: 'firstQuery'
}),
graphql(secondQuery, {
name: 'secondQuery',
skip: ({ firstQuery }) => !firstQuery.data,
options: ({firstQuery}) => ({
variables: {
var1: firstQuery.data.someQuery.someValue
}
})
})
)(withRouter(TestPage))
Run Code Online (Sandbox Code Playgroud)
请注意,我们使用skip
跳过第二个查询,除非我们实际上有来自第一个查询的数据.
对于使用react apollo hooks的任何人,相同的方法都有效。
您可以使用两个useQuery
钩子并将第一个查询的结果传入skip
option
第二个,
示例代码:
const AlertToolbar = ({ alertUid }: AlertToolbarProps) => {
const authenticationToken = useSelectAuthenticationToken()
const { data: data1 } = useQuery<DataResponse>(query, {
skip: !authenticationToken,
variables: {
alertUid,
},
context: makeContext(authenticationToken),
})
const { data: data2, error: error2 } = useQuery<DataResponse2>(query2, {
skip:
!authenticationToken ||
!data1 ||
!data1.alertOverview ||
!data1.alertOverview.deviceId,
variables: {
deviceId:
data1 && data1.alertOverview ? data1.alertOverview.deviceId : null,
},
context: makeContext(authenticationToken),
})
if (error2 || !data2 || !data2.deviceById || !data2.deviceById.id) {
return null
}
const { deviceById: device } = data2
return (
<Toolbar>
...
// do some stuff here with data12
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5275 次 |
最近记录: |