GraphQL突变仅在重新加载页面时返回null



我正在使用nextJS和urqlClient进行ssr。我现在所有的页面都关闭了ssr。我面临的问题如下。我有一个配置文件页面,它在从graphql获取用户后呈现数据。如果找不到用户,路由器会推送用户登录。我面临的问题是,当我使用localhost:3000/profile手动转到浏览器中的配置文件页面时,突变在第一次渲染时返回未定义,在第二次渲染时则返回对象。

但是,如果我使用NavBar组件<NextLink href="/profile">访问配置文件页面,则突变会在第一次渲染时返回对象,并且数据会正确显示。我有一种感觉,它与SSR有关,因为当我重新加载页面时,console.log("profile page", data);是服务器端的触发器,但当我使用导航栏时,它不是。

我把我所有的页面都包装在urqlclient中,作为

export default withUrqlClient(createUrqlClient, { ssr: false })(Profile);

这是配置文件页面的代码。

const [{ data, fetching }] = useMeQuery({ pause: isServer() });
console.log("profile page", data);
useEffect(() => {
if (!data?.me) {
router.push("/auth");
}
});

所以我通过确保在获取查询时router.push((方法没有被触发来解决这个问题,并添加了useEffect的依赖项。这是正确的做法。这与SSR无关。

useEffect(() => {
if (!fetching && !data?.me) {
router.push("/auth");
}
},[fetching,data,router]);

最新更新