【发布时间】:2021-12-22 06:34:42
【问题描述】:
useSession((s) => s.user) 将返回用户 object 或 null。在索引页面上应该显示用户名。该页面包含在PrivatePageProvider 中,如果用户对象为空,它将重定向客户端。因此,如果用户为 null,则甚至不应呈现 IndexPage,而是提供程序返回 null 并重定向。然而,这不起作用并且TypeError 被抛出,因为IndexPage 尝试访问null 的name。使用 react-router 这种方法有效,但不适用于 Next。我知道我可以只使用可选链接运算符,但我想假设如果页面包含在 PrivatePageProvider 中,user 不为空。
function PrivatePageProvider({ children }) {
const user = useSession((s) => s.user);
const router = useRouter();
useEffect(() => {
if (!user) {
router.push('/auth/login');
}
}, [user, router]);
return !user ? null : children;
}
function IndexPage() {
const user = useSession((s) => s.user);
return (
<PrivatePageProvider>
<h1>Hello {user.name}</h1>
</PrivatePageProvider>
);
}
错误:
TypeError: Cannot read properties of null (reading 'name')
为什么即使IndexPage 没有被渲染,也会出现这个错误?如何在不涉及服务器端的情况下让我的方法工作?
【问题讨论】:
标签: reactjs authentication next.js