开发者问题收集

GraphQL 与 React-Apollo:无法读取未定义的属性

2019-10-03
12212

我定义了以下 gQL,

import gql from 'graphql-tag'

const SIGN_UP_QUERY = gql`
  query {
    signUpForm @client {
      firstName
      email
      password
    }
  }
`

并且我将其与 react-apollo 查询一起使用


<Query query={SIGN_UP_QUERY}>
    {({
      data: {
        signUpForm: { firstName }
      },
      loading
    }) => { ...... }}
</Query>

使用这个,我收到错误 无法读取未定义的属性“firstName”

我在这里做错了什么?

3个回答

您正在对 data 变量进行解构,但该变量尚未存在或尚未加载。您应该等到 loading = false 后再尝试访问数据。

Calvin
2019-10-03

您是否检查数据是否已加载?

if (loading) return "data not fetched yet";
return <p>{ firstName }</p>;
Terje Laugaland
2019-10-03

由于您正在解构变量,因此您需要确保 datadata.signUpForm 为 null 或未定义。

以下是适合您情况的 示例

有三个问题可能导致 data/data.signUpForm 不是对象:

  1. 加载查询时,数据为 undefined
  2. 加载后,signUpForm 在 apollo 缓存中不可用
  3. 加载后,signUpForm 在缓存中可用,但它为 null

要解决您的问题:

  1. 加载后处理数据,查询未返回任何错误
  2. 确保您的数据在缓存中可用
  3. 确保您返回的数据具有正确的结构
Long Nguyen Duc
2019-10-03