gpt4 book ai didi

javascript - 如何在 GraphQL 中正确链接 useQuery 和 useMutation?

转载 作者:行者123 更新时间:2023-11-28 17:04:35 25 4
gpt4 key购买 nike

我有来自react-apollo-hooks的useQuery和useMutation背对背。我希望能够使用 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)

变量data.posts[0].author.id显示未定义。如何确保返回值是及时定义的?

最佳答案

How do I make sure that the returned value is defined in time?

您可以简单地检查 useQuery block 后的条件

<小时/>

更新

钩子(Hook)不能有条件地调用。

通常的建议是在 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
}
})

另一个选项:useApolloClient:

  • useQuery加载突变所需的数据

  • const client = useApolloClient();

  • useEffect - 有条件地(!loadingdata 非空)使用 client.mutate() 获取(在查询中)数据作为变量;

自定义 Hook 可以使用 3 个参数来完成:(query,mutation, { mapDataToVariables })

关于javascript - 如何在 GraphQL 中正确链接 useQuery 和 useMutation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com