Apollo客户端在next.js、javascript、graphql和react js中的问题

Apollo客户端在next.js、javascript、graphql和react js中的问题,javascript,reactjs,caching,graphql,apollo,Javascript,Reactjs,Caching,Graphql,Apollo,如果我首先访问主页或刷新主页,我将无法在解析器中获取配置文件,因为cache.readQuery不工作 它无限地调用api 如果我移动到另一个页面并再次返回主页,cache.readQuery将正常工作,并正确获得post的配置文件和voteStatus 以前有人遇到过这个问题吗?home.tsx是我的项目的主页 此外,useQuery(@apollo/react hooks)在每个页面上都会获取旧数据 如果你有经验,请帮助我 home.tsx 我还没有使用过这个设置,只是假设您的应用程序可

如果我首先访问主页或刷新主页,我将无法在解析器中获取配置文件,因为cache.readQuery不工作

它无限地调用api

如果我移动到另一个页面并再次返回主页,cache.readQuery将正常工作,并正确获得post的配置文件和voteStatus

以前有人遇到过这个问题吗?home.tsx是我的项目的主页

此外,useQuery(@apollo/react hooks)在每个页面上都会获取旧数据

如果你有经验,请帮助我

  • home.tsx

我还没有使用过这个设置,只是假设您的应用程序可能正在清除缓存,所以当最初尝试在主页上获取该查询时失败

我可能又错了,但根据这些文件:

如果您的缓存不包含完成任务所需的所有数据 指定查询时,readQuery会引发错误。它从不试图取回 来自远程服务器的数据

在您的
readQuery

let profile;
try {
  result = cache.readQuery({
    query: GET_PROFILE,
    variables: {
      accountname: args.accountname,
      domainID: 1,
    },
  });
  profile = result.profile;
} catch(err) {
  console.error(err);
  // do something like printing an error in console, or nothing
}

cache.readQuery
无法读取不存在的数据-必须先查询数据

可能您正在切换的某个页面在返回
时查询此数据(配置文件),使其可用

解决方案-在查询帖子之前查询配置文件:

const Home: NextPage<Props> = ({ author }) => {
  const { data: dataProfile, error: errorProfile, loading: loadingProfile } = useQuery(GET_PROFILE);
  const { data, fetchMore, loading } = useQuery(GET_POSTS, {
    skip: !dataProfile,
    variables: {
      accountname: author,
      page: 1,
      postsStatus: 'home',
      pathBuilder: () => `posts/?Page=1&Limit=5&domainId=1`,
    },
  });
const Home:NextPage=({author})=>{
const{data:dataProfile,error:errorProfile,loading:loadingProfile}=useQuery(GET_PROFILE);
const{data,fetchMore,load}=useQuery(GET_POSTS{
跳过:!数据配置文件,
变量:{
姓名:作者,
页码:1,
postsStatus:“家”,
pathBuilder:()=>`posts/?Page=1&Limit=5&domainId=1`,
},
});
skip
选项用于块查询,直到满足条件为止


在接收配置文件数据(并将其写入缓存)后获取帖子。通过这种方式,本地解析器(
voteStatus
)可以使用
cache.readQuery()
访问所需数据。

这总是让我陷入困境,因此我无法获取配置文件。感谢您的回答,但这不是解决此问题的方法
let profile;
try {
  result = cache.readQuery({
    query: GET_PROFILE,
    variables: {
      accountname: args.accountname,
      domainID: 1,
    },
  });
  profile = result.profile;
} catch(err) {
  console.error(err);
  // do something like printing an error in console, or nothing
}
const Home: NextPage<Props> = ({ author }) => {
  const { data: dataProfile, error: errorProfile, loading: loadingProfile } = useQuery(GET_PROFILE);
  const { data, fetchMore, loading } = useQuery(GET_POSTS, {
    skip: !dataProfile,
    variables: {
      accountname: author,
      page: 1,
      postsStatus: 'home',
      pathBuilder: () => `posts/?Page=1&Limit=5&domainId=1`,
    },
  });