Несколько крючков useLazyQuery (клиент Apollo) в компоненте функции React

#reactjs #react-hooks #apollo

Вопрос:

Я пытаюсь включить два крючка useLazyQuery Apollo-клиента в свой функциональный компонент. Любой из них прекрасно работает в одиночку с другим прокомментированным, но как только я включаю оба, второй ничего не делает. Есть какие-нибудь идеи?

 export default function MainScreen(props) {

  useEffect(() => {
    validateWhenMounting();
  }, []);

  const [validateWhenMounting, { loading, error, data }] = useLazyQuery(
    validateSessionToken,
    {
      onCompleted: (data) => console.log('data', data),
    },
  );

  const [validate, { loading: loading2, error: error2, data: data2 }] =
    useLazyQuery(validateSessionTokenWhenSending, {
      onCompleted: (data2) => console.log('data2', data2),
    });


  const handleSendFirstMessage = (selectedCategory, title, messageText) => {
    console.log(selectedCategory, title, messageText);
    validate();
  }; 

Ответ №1:

Понял это: добавление пары ключ-значение fetchPolicy: 'network-only', после завершения делает свое дело. Похоже, что в противном случае запрос не выполняется из-за кэширования…

Комментарии:

1. Вы также можете попробовать null компоненты для обработки сложных запросов

2. Не могли бы вы подробнее остановиться на этом?

3. Конечно, сделаю завтра 🙂

Ответ №2:

Это та модель, о которой я говорил и упоминал в комментариях:

 const dummyComponent = () => {
  const [lazyQuery] = useLazyQuery(DUMMY_QUERY, {variables: dummyVariable,
   onCompleted: data => // -> some code here, you can also accept an state dispatch function here for manipulating some state outside
   onError: error => // -> you can accept state dispatch function here to manipulate state from outside
 });
  return null;
}
 

это также шаблон, который вам иногда понадобится

Комментарии:

1. Круто, спасибо, чувак! Это пригодится, я уверен 🙂