如何解决如果参数不存在,如何重定向 Next.JS
我的页面可以包含两个参数之一。如果没有电子邮件和哈希,我想重定向用户。
/confirm-email?email=user@email.com
我尝试了以下方法:
const router = useRouter();
const { email,hash } = router.query;
useEffect(() => {
if (!email && !hash) {
router.push('/');
} else if (hash) {
// Do stuff
}
},[email,hash,router]);
但是第一次渲染它们时的问题是 undefined
,即使存在哈希或电子邮件参数,用户也会被重定向。
我该如何解决这个问题?有什么建议吗?
解决方法
在做了一些研究之后。我发现最好检查参数是否存在于 getServerSideProps()
export async function getServerSideProps({ query }) {
if (!query.email && !query.hash) {
return {
notFound: true,};
}
return {
props: {},};
}
,
if (hash)
看起来没必要。
和
query: Object - 解析为对象的查询字符串。如果页面没有数据获取要求,则在预渲染期间它将是一个空对象。默认为 {}
是来自https://nextjs.org/docs/api-reference/next/router
的引述我认为这就是问题所在。
参数是 Router.query 中的文件名
例如:
import { useRouter } from 'next/router'
const Post = () => {
const router = useRouter()
const { pid } = router.query
return <p>Post: {pid}</p>
}
export default Post
对于 pages/morepages/[pid].js 中的文件 [pid].js
也许, 要使用 2 个参数选项,您需要转到同时使用两者的网站页面。所以他们之间必须有一个标签。
如“网站/emial/hash”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。