您的组件添加的道具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))
请注意,skip
我们通常会跳过第二个查询,除非我们实际上有来自第一个查询的数据可以使用。
使用查询组件
如果您正在使用该Query
组件,您也可以使用该skip
属性,尽管您也可以选择在第一个渲染道具函数中返回其他内容(例如null
或加载指示器):
<Query query={firstQuery}>
{({ data: { someQuery: { someValue } = {} } = {} }) => (
<Query
query={secondQuery}
variables={{var1: someValue}}
skip={someValue === undefined}
>
{({ data: secondQueryData }) => (
// your component here
)}
</Query>
使用 useQuery 挂钩
您还可以skip
与useQuery
钩子一起使用:
const { data: { someQuery: { someValue } = {} } = {} } = useQuery(firstQuery)
const variables = { var1: someValue }
const skip = someValue === undefined
const { data: secondQueryData } = useQuery(secondQuery, { variables, skip })
突变
与查询不同,突变涉及专门调用函数以触发请求。此函数返回一个 Promise,它将使用突变的结果进行解析。这意味着,在处理突变时,您可以简单地将生成的 Promise 链接起来:
const [doA] = useMutation(MUTATION_A)
const [doB] = useMutation(MUTATION_B)
// elsewhere
const { data: { someValue } } = await doA()
const { data: { someResult } } = await doB({ variables: { someValue } })