Как мне убедиться, что возвращаемое значение определено во времени?
Вы можете просто проверить условие после useQuery
block
ОБНОВЛЕНИЕ
Крючки не могут быть вызваны условно.
Обычный совет - поместить условие в 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
:
Пользовательский хук может быть выполнен с 3 параметрами: (query, mutation, { mapDataToVariables })