Graphql 在单独查询中加载uu typename字段Apollo客户端不更新UI

Graphql 在单独查询中加载uu typename字段Apollo客户端不更新UI,graphql,apollo-client,Graphql,Apollo Client,我正试图分两步加载有关类型的信息(因为我在secondQuery中请求的信息需要一些时间才能加载): 组件: const MyComponent = ({startDate}) => { const firstQuery = useQuery( GET_INFO_PART_ONE, { variables: {startDate} } ); const secondQuery = useQuery( GET_INFO_PART_TWO

我正试图分两步加载有关类型的信息(因为我在secondQuery中请求的信息需要一些时间才能加载):

组件:

const MyComponent = ({startDate}) => {
  const firstQuery = useQuery(
    GET_INFO_PART_ONE,
    {
     variables: {startDate}
    }
  );

  const secondQuery = useQuery(
    GET_INFO_PART_TWO,
    {
     variables: {startDate}
    }
  );
}
export const GET_INFO_PART_ONE = gql`
  query getInfoPartOne(
    $startDate: DateTime!
  ) {
    infoPageResults(
      startDate: $startDate
    ) {
      edges {
        info {
          infoID
          infoFieldOne
          infoFieldTwo
          infoFieldThree
        }
      }
    }
  }
`;

export const GET_INFO_PART_TWO = gql`
  query getInfoPartTwo(
    $startDate: DateTime!
  ) {
    infoPageResults(
      startDate: $startDate
    ) {
      edges {
        info {
          infoID
          infoFieldFour{
            netRate
          }
        }
      }
    }
  }
`;
查询:

const MyComponent = ({startDate}) => {
  const firstQuery = useQuery(
    GET_INFO_PART_ONE,
    {
     variables: {startDate}
    }
  );

  const secondQuery = useQuery(
    GET_INFO_PART_TWO,
    {
     variables: {startDate}
    }
  );
}
export const GET_INFO_PART_ONE = gql`
  query getInfoPartOne(
    $startDate: DateTime!
  ) {
    infoPageResults(
      startDate: $startDate
    ) {
      edges {
        info {
          infoID
          infoFieldOne
          infoFieldTwo
          infoFieldThree
        }
      }
    }
  }
`;

export const GET_INFO_PART_TWO = gql`
  query getInfoPartTwo(
    $startDate: DateTime!
  ) {
    infoPageResults(
      startDate: $startDate
    ) {
      edges {
        info {
          infoID
          infoFieldFour{
            netRate
          }
        }
      }
    }
  }
`;
当我执行此操作并解决这两个查询时,缓存的根查询会像我预期的那样包含数据,infoPageResults包含一个边数组,其中每个边的
info
\uuuu类型名称包括
GET\u info\u PART\u ONE
GET\u info\u PART\u TWO
查询中指定的字段。然后,我希望上述组件中的
firstQuery.data.infoPageResults.edges
包含从第二个查询加载的字段

问题

firstQuery和secondQuery加载完成后,firstQuery.data.infoPageResults.Edge不包含secondQuery加载的字段,即使缓存的值看起来与我预期的一样

  • 我对查询挂钩的工作方式是否有明显的误解
  • 有没有更好的策略可以分两步将附加字段加载到_typename上

  • 只缓存查询的内容。。。没有缓存的节点条目(另外,单独缓存-因为缓存正在规范化缓存),因为没有
    id
    字段(默认情况下需要作为唯一条目id)。。。它可以定制为使用
    infoID
    作为信息类型(参见文档)

    正确缓存的节点(信息)条目可用于在第二个查询结果呈现列表上显示节点详细信息(来自第一个查询)。。。在子组件(react)中使用附加的“仅缓存”策略查询(按id的信息节点)

    从更多标准示例/教程开始探索可能性。


    更新

    否,单独获取的数据可以单独访问。。。这不是缓存问题,也不是查询问题

    • 第一次查询不会返回在第二次查询中获取的字段/属性。。。通过设计
    • 当第二个查询结果到达时,使用第一个结果呈现的列表将不会刷新。。。如果不包含参考/不使用第二数据

    在传递到某个视图组件之前,您可以并行使用/传递这两个数据,或将它们组合(以不变的方式)(“表示和容器组件模式”)列表可以使用一个道具呈现,并在第二个道具更改时更新

    仅缓存查询的内容。。。没有缓存的节点条目(另外,单独缓存-因为缓存正在规范化缓存),因为没有
    id
    字段(默认情况下需要作为唯一条目id)。。。它可以定制为使用
    infoID
    作为信息类型(参见文档)

    正确缓存的节点(信息)条目可用于在第二个查询结果呈现列表上显示节点详细信息(来自第一个查询)。。。在子组件(react)中使用附加的“仅缓存”策略查询(按id的信息节点)

    从更多标准示例/教程开始探索可能性。


    更新

    否,单独获取的数据可以单独访问。。。这不是缓存问题,也不是查询问题

    • 第一次查询不会返回在第二次查询中获取的字段/属性。。。通过设计
    • 当第二个查询结果到达时,使用第一个结果呈现的列表将不会刷新。。。如果不包含参考/不使用第二数据

    在传递到某个视图组件之前,您可以并行使用/传递这两个数据,或将它们组合(以不变的方式)(“表示和容器组件模式”)列表可以使用一个道具呈现,并在第二个道具更改时更新

    谢谢您的回复,但我不确定您在这里的建议是什么。客户端的
    InMemoryCache
    配置为通过
    dataIdFromObject
    config选项使用
    infoID
    而不是默认的
    id
    字段。如果我需要所有
    info
    pageResults的所有详细信息(从第一次和第二次查询加载),您是否建议我添加第三次查询,并使用仅缓存策略?。。。您应该提到所有非标准配置/使用。。。并描述如何传递或呈现这些数据。。。还有那些没有更新的…足够公平。谢谢你的回答。听起来我对查询挂钩的工作原理有一个核心误解。谢谢你的回复,但我不确定你在这里的建议是什么。客户端的
    InMemoryCache
    配置为通过
    dataIdFromObject
    config选项使用
    infoID
    而不是默认的
    id
    字段。如果我需要所有
    info
    pageResults的所有详细信息(从第一次和第二次查询加载),您是否建议我添加第三次查询,并使用仅缓存策略?。。。您应该提到所有非标准配置/使用。。。并描述如何传递或呈现这些数据。。。还有那些没有更新的…足够公平。谢谢你的回答。听起来这是我对查询挂钩如何工作的一个核心误解。