Ошибка вызвана перенаправлением рендеринга раньше, чем получение данных.
Normlly ... вместо useEffect
вы можете использовать простое useQuery
и использовать условие loading
или !data
для рендеринга некоторых <Loading/>
для принятия решения о перенаправлении или предоставлении доступа (рендеринг перенаправленного или защищенного содержимого).
Мутация обычно используется для изменения удаленных данных. Используя запрос, вы также можете передать переменную и вернуть ответ.
Я использую django graphql jwt, и проблема в том, что verifytoken для этого является мутацией
Обычно / обычно токен передается по заголовку для запросов, а API возвращает ответ или ошибки (для отсутствующего / просроченного токена). Обычно у вас есть возможность запросить у текущего пользователя подтверждение входа в систему.
... , в этом случае мы хотим использовать мутацию
... вместо client.mutate
мы можем использовать хуки - useMutation или лучше Пример API (apollo docs:]) - чтобы получить доступ к loading state
до принятия решения
const [verifyToken, { data, loading, error }] = useMutation( VERIFY_TOKEN_MUTATION, variables: { token } );
Проблемы?
- мутации не вызываются в начале - loading
не будет истинным с самого начала; возвращенные данные.
Для запуска мутации при запуске мы можем использовать useEffect
, для возвращаемых данных мы можем использовать обработчик onCompleted
, но мы можем просто использовать data
- должен быть неопределенным / обнуляться при запуске, использоваться для условий.
Нечто подобное должно работать (нам не нужно ждать, и т. Д. c. - data
, loading
, error
будут обновлены автоматически):
useEffect(() => {
verifyToken(); // ariables passed earlier, can be passed here
}, []);
if( !data ) return <Loading />
return data.someSuccessVerifiedField ? continue_journey : you_must_go_back_to_login;