reactjs - GraphQL Playground 返回数据,而应用程序返回 null

标签 reactjs graphql

我正在 React+TS/GraphQL/Prisma 中开发一个应用程序。该 API 是用 GraphQL 编写的,当我在 Playground 中运行特定查询时,我得到了预期的数据,但是当我在 React 中运行完全相同的查询时,我得到 null。为什么会这样?

我在查询中运行的内容(相关部分)

query {
  session {
    userData: {
      firstName
      lastName
      dateOfBirth 
    }
  }
}

并在 Playground 上返回

{
  "data": {
    "session": {
      "userData": {
        "firstName":"John",
        "lastName":"Doe",
        "dateOfBirth":null,
      }
    }
  }
}

但在应用程序中,当我控制台记录 userData 或 data.session 时,它会为整个对象返回 null。 console.log(data) 打印

session: {
  userData: null
}

有人知道为什么会这样吗? Playground 准确地拉取用户数据并填充子字段,但在浏览器中的 App 上,它只返回“null”。

最佳答案

我发现了解决方案并想在这里分享。

问题的出现是因为我们正在处理一个包含更新数据的 session 。因此,用户创建一个 session ,然后更新,然后下一步更新更多内容,等等,然后最终提交 session 。

我的问题中描述的问题是基于 Apollo 默认为缓存优先,因为它的获取策略。因此,当用户更新时,下一步会查询 session 数据的未更新、缓存版本。

要解决此问题,在该过程的每个步骤中,我们需要调用查询并将获取策略设置为“仅网络”,如下所示:

const {loading, error, data} = useSessionQuery({fetchPolicy: 'network-only'});

这将确保从执行 updateMutation 的网络中提取数据,而不是从缓存的(过时的)副本中提取数据。

关于reactjs - GraphQL Playground 返回数据,而应用程序返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62926303/

相关文章:

javascript - react.js : how to load local react. js 而不是使用在线的

typescript - 将 TypeORM 实体模型类与 NestJS-GraphQL 模式类型结合使用好吗?

javascript - 将查询参数与集合运算符一起使用

graphql - Dropzone Apollo-upload-client 使用 Upload!类型

javascript - 如何通过钩子(Hook)更新 react 中的对象状态

reactjs - 如何在 url 参数更改时重新加载组件?

javascript - 带有函数的“React Hook useEffect 缺少依赖项”警告

javascript - 无法使用来自另一个模块或领域的 GraphQLSchema

java - 这里有人成功地将 Micronaut GraphQL API 部署到 AWS Lambda 吗?

javascript - 使用 jquery 选择器渲染 reactjs