Graphql 在单独查询中加载uu typename字段Apollo客户端不更新UI
我正试图分两步加载有关类型的信息(因为我在secondQuery中请求的信息需要一些时间才能加载): 组件: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
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加载的字段,即使缓存的值看起来与我预期的一样
只缓存查询的内容。。。没有缓存的节点条目(另外,单独缓存-因为缓存正在规范化缓存),因为没有
id
字段(默认情况下需要作为唯一条目id)。。。它可以定制为使用infoID
作为信息类型(参见文档)
正确缓存的节点(信息)条目可用于在第二个查询结果呈现列表上显示节点详细信息(来自第一个查询)。。。在子组件(react)中使用附加的“仅缓存”策略查询(按id的信息节点)
从更多标准示例/教程开始探索可能性。
更新 否,单独获取的数据可以单独访问。。。这不是缓存问题,也不是查询问题
- 第一次查询不会返回在第二次查询中获取的字段/属性。。。通过设计李>
- 当第二个查询结果到达时,使用第一个结果呈现的列表将不会刷新。。。如果不包含参考/不使用第二数据李>
在传递到某个视图组件之前,您可以并行使用/传递这两个数据,或将它们组合(以不变的方式)(“表示和容器组件模式”)列表可以使用一个道具呈现,并在第二个道具更改时更新仅缓存查询的内容。。。没有缓存的节点条目(另外,单独缓存-因为缓存正在规范化缓存),因为没有
id
字段(默认情况下需要作为唯一条目id)。。。它可以定制为使用infoID
作为信息类型(参见文档)
正确缓存的节点(信息)条目可用于在第二个查询结果呈现列表上显示节点详细信息(来自第一个查询)。。。在子组件(react)中使用附加的“仅缓存”策略查询(按id的信息节点)
从更多标准示例/教程开始探索可能性。
更新 否,单独获取的数据可以单独访问。。。这不是缓存问题,也不是查询问题
- 第一次查询不会返回在第二次查询中获取的字段/属性。。。通过设计李>
- 当第二个查询结果到达时,使用第一个结果呈现的列表将不会刷新。。。如果不包含参考/不使用第二数据李>
在传递到某个视图组件之前,您可以并行使用/传递这两个数据,或将它们组合(以不变的方式)(“表示和容器组件模式”)列表可以使用一个道具呈现,并在第二个道具更改时更新谢谢您的回复,但我不确定您在这里的建议是什么。客户端的
InMemoryCache
配置为通过dataIdFromObject
config选项使用infoID
而不是默认的id
字段。如果我需要所有info
pageResults的所有详细信息(从第一次和第二次查询加载),您是否建议我添加第三次查询,并使用仅缓存策略?。。。您应该提到所有非标准配置/使用。。。并描述如何传递或呈现这些数据。。。还有那些没有更新的…足够公平。谢谢你的回答。听起来我对查询挂钩的工作原理有一个核心误解。谢谢你的回复,但我不确定你在这里的建议是什么。客户端的InMemoryCache
配置为通过dataIdFromObject
config选项使用infoID
而不是默认的id
字段。如果我需要所有info
pageResults的所有详细信息(从第一次和第二次查询加载),您是否建议我添加第三次查询,并使用仅缓存策略?。。。您应该提到所有非标准配置/使用。。。并描述如何传递或呈现这些数据。。。还有那些没有更新的…足够公平。谢谢你的回答。听起来这是我对查询挂钩如何工作的一个核心误解。