我有一个页面,可以有2个参数之一。电子邮件和哈希,如果没有存在,我想重定向用户。
/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
,即使存在散列或电子邮件参数,用户也会被重定向。
我该如何解决这个问题呢?有什么建议吗?
发布于 2021-05-27 21:10:30
在做了一些研究之后。我发现最好检查一下getServerSideProps()
中的参数是否存在
export async function getServerSideProps({ query }) {
if (!query.email && !query.hash) {
return {
notFound: true,
};
}
return {
props: {},
};
}
发布于 2021-05-27 18:39:07
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个参数选项,您需要转到同时使用这两个选项的网站页面。所以它们之间必须有一个标签。
比如“hash/emial/hash”
https://stackoverflow.com/questions/67727978
复制