Kev*_*vvv 3 javascript reactjs graphql react-apollo react-hooks
我有 useQuery 和 useMutation 从 react-apollo-hooks 背靠背。我希望能够使用 useQuery 的返回值作为 useMutation 的变量。目前, useQuery 的值没有及时返回变量,导致变量未定义。
const { data, error, loading } = useQuery(GET_POSTS, {
variables: {
id: props.match.params.id
}
})
const item = props.match.params.id
const owner = data.posts[0].author.id
const variables = { item , owner, startDate, endDate }
const bookItem = useMutation(CREATE_BOOKING_MUTATION, variables)
Run Code Online (Sandbox Code Playgroud)
变量data.posts[0].author.id显示未定义。如何确保及时定义返回值?
如何确保及时定义返回值?
您可以在useQuery阻止
后简单地检查条件
不能有条件地调用钩子。
通常的建议是将条件放在useEffect:
const { data, error, loading } = useQuery(GET_POSTS, {
variables: {
id: props.match.params.id
}
})
const item = props.match.params.id
// data.posts can be undefined at start
const owner = loading ? null : data.posts[0].author.id
const variables = { item , owner, startDate, endDate }
const bookItem = useMutation(CREATE_BOOKING_MUTATION, variables)
useEffect(() => {
if(!loading) {
bookItem(); // called when data ready
}
})
Run Code Online (Sandbox Code Playgroud)
另一种选择useApolloClient::
useQuery 加载突变所需的数据
const client = useApolloClient();
useEffect- 有条件地(!loading或非data空)使用client.mutate()获取的(查询中)数据作为变量;自定义钩子可以使用 3 个参数完成: (query, mutation, { mapDataToVariables })
| 归档时间: |
|
| 查看次数: |
4282 次 |
| 最近记录: |