#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. Круто, спасибо, чувак! Это пригодится, я уверен 🙂