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