использовать данные Query Hook - PullRequest
0 голосов
/ 16 января 2020

Я могу вернуть данные запроса с помощью useQuery без проблем. Я пытаюсь получить пользователя с помощью следующего запроса, но при доступе к data.user мое приложение выдает ошибку, говоря, что данные не определены.

const userQuery = gql`
{
user {
   id
   email
 }
 } `;


export default NavWrapper = () => {
const { loading, error, data }  = useQuery(userQuery);
console.log(data);

if (loading) return <ActivityIndicator size="large"/>
if (!data) return <Login/>;
return <Navigator/>;
}

Вышеприведенное работает нормально и возвращает пользователя в объект, но мне нужно визуализировать комп для входа в систему на основе фактического пользователя, а не оболочки данных. Любые идеи? должно быть просто ...

1 Ответ

1 голос
/ 16 января 2020

Возможно, у вас небезопасный доступ к свойству и вы пытаетесь использовать data.user до завершения запроса. По сути, ваш код работает в предположении, что данные всегда будут присутствовать, тогда как природа запроса такова, что существует начальное состояние без запроса, в котором нет данных, за которым следует состояние загрузки, во время которого выполняется запрос, и данные недоступны, после чего следует несколько окончательное состояние, в котором данные становятся доступными. Ваш код должен быть подготовлен для всех штатов.

Чтобы учесть эти ситуации, вы должны использовать безопасный доступ к собственности следующим образом:

const user = data ? data.user : null

В качестве альтернативы вы можете используйте безопасную библиотеку доступа к свойствам, такую ​​как idx:

const user = idx(data, _ => _.user) || null

Кроме того, вы захотите убедиться, что все компоненты, использующие ваши пользовательские данные, подготовлены для случая, когда пользователь недоступен для них.

Примечание: data.user не упоминается нигде в указанном вами коде. Будет полезно точно знать, куда вы звоните (например, в теле NavWrapper vs Login или где-либо еще).

...