Передача `refetch` в контекст - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь передать повторное получение из useQuery() в контекст, чтобы я мог вызвать повторное получение из контекста. Мне не удалось определить правильный тип, поэтому я либо столкнулся с проблемой несоответствия типов, либо IDE не жалуется, но приложение ломается из-за несоответствия типов. Когда происходит сбой браузера, он сообщает, что refetch() - это не функция.

Я просто хотел бы передать refetch в Context и иметь возможность вызывать его. Любая помощь приветствуется.

Ошибка ввода IDE

Вот соответствующий код:

Интерфейс для контекста реквизитов:

interface ConfirmationModalContextInterface {
   ...
   setRefetch: (refetch: (variables?: Record<string, any>) => Promise<ApolloQueryResult<any>>) => void;
}

Интерфейс для модального подтверждения контекста:

interface ConfirmationModalProps {
   ...
   refetch: (variables?: Record<string, any>) => Promise<ApolloQueryResult<any>> | undefined;
}

Оригинальный refetch экземпляр:

const {loading, error, data, refetch} = useQuery(queries.USER_POSTS);

Настройка реквизитов для контекста:

const confirmModalContext = useContext(ConfirmationModalContext);
const {..., setRefetch} = confirmModalContext;

setRefetch(refetch);

1 Ответ

0 голосов
/ 14 марта 2020

Как показывает ошибка, refetch может быть неопределенным, но ваш интерфейс не принимает это во внимание. Тем не менее, нет необходимости передавать функцию refetch таким образом - просто используйте тот же хук useQuery внутри любого компонента, который вам нужен. Вы можете использовать один и тот же хук useQuery для нескольких компонентов без запуска нескольких запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...