Почему мой запрос снова и снова вызывается с помощью useLazyQuery? Крючки Аполлона
Я использую useLazyQuery
крючок от Аполлона и попадет в бесконечный цикл. Вот мой компонент:
import styled from 'styled-components'
import { useLazyQuery } from "@apollo/react-hooks"
import GENERATE_EFT_REFERENCE_NUMBER from "./graphql/generate-eft-reference-number.graphql"
let Link = styled.a`
color: ${props => props.theme.color.turquoise500};
cursor: pointer;
text-decoration: underline;
`
const GenerateEftReferenceLink = ({
externalAccountId,
financialMethodId,
internalAccountId,
highestReferenceNumber,
methodId,
updateMethod
}) => {
const [generateEftReference = {}, { called, loading, data }] = useLazyQuery(
GENERATE_EFT_REFERENCE_NUMBER,
{
variables: {
externalAccountId,
financialMethodId,
internalAccountId,
highestReferenceNumber
},
onCompleted: ({ generateEftReferenceNumber: reconciliationSerialNumber }) => {
updateMethod({ reconciliationSerialNumber }, methodId)
}
}
)
return <Link onClick={generateEftReference}>Click Me</Link>
}
export default GenerateEftReferenceLink
в onCompleted
вариант, беру результат и использую обратный вызов (updateMethod
), чтобы обновить мой объект.
Проблема, с которой я сталкиваюсь, заключается в том, что запрос вызывается снова и снова. Я попал вonCompleted
каждый раз, который звонит updateMethod
и я остаюсь в этом бесконечном цикле. ВonClick
вызывается только тогда, когда Link
нажата (я проверил это, поставив debugger
в onClick
), так что это должно быть связано с useLazyQuery
крючок.
Я исправил это, изменив использование ApolloConsumer
компонент, но я хочу понять, почему я попал в это состояние с помощью хука.
Есть идеи?
2 ответа
У меня была такая же проблема, но с
useQuery
ловушка, и я не смог обновить библиотеку до последней версии, что вызовет некоторые побочные эффекты в моем проекте, поэтому я решил это таким образом, мой, пока я обновляю библиотеку.
onCompleted: useCallback(() => {//your code}
Это была ошибка в Apollo, они исправили ее в @apollo/react-hooks v3.1.3См. Это