我有一个自定义钩子,可以检查您是否已登录,如果未登录,则将您重定向到登录页面。这是我的钩子的伪实现,假设您没有登录:
import { useRouter } from 'next/router';
export default function useAuthentication() {
if (!AuthenticationStore.isLoggedIn()) {
const router = useRouter();
router.push('/login');
}
}
但是当我使用这个钩子时,我得到了以下错误:
错误:未找到路由器实例。您应该只在应用程序的客户端内使用“next/router”。https://err.sh/vercel/next.js/no-router-instance
我检查了错误中的链接,但这并没有真正的帮助,因为它只是告诉我将push
语句移动到我的渲染函数中。
我也试过这个:
// My functional component
export default function SomeComponent() {
const router = useRouter();
useAuthentication(router);
return <>...</>
}
// My custom hook
export default function useAuthentication(router) {
if (!AuthenticationStore.isLoggedIn()) {
router.push('/login');
}
}
但这只会导致相同的错误。
有没有办法允许在 next.js 中的 React 组件之外进行路由?