フロントエンドにApollo Clientを、バックエンドにGraphcoolを使用しています。 2つのクエリfirstQuery
とsecondQuery
があり、ページが開いたときに順番に呼び出されるようにします。サンプルコードは次のとおりです(TestPageコンポーネントの定義はここにリストされていません)。
export default compose(
graphql(firstQuery, {
name: 'firstQuery'
}),
graphql(secondQuery, {
name: 'secondQuery' ,
options: (ownProps) => ({
variables: {
var1: *getValueFromFirstQuery*
}
})
})
)(withRouter(TestPage))
secondQuery
の結果からfirstQuery
のvar1
を取得する必要があります。 Apollo Clientでこれを行うにはどうすればよいですか?それとも他の方法がありますか?前もって感謝します。
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
を使用して2番目のクエリをスキップすることに注意してください。
react apollo hooks を使用している場合は、同じアプローチが機能します。
2つのuseQuery
フックを使用して、最初のクエリの結果を2番目の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