Reactjs 如果参数Next.JS不存在,如何重定向
我有一个页面可以有两个参数之一。电子邮件和散列如果没有,我想重定向用户Reactjs 如果参数Next.JS不存在,如何重定向,reactjs,next.js,next-router,Reactjs,Next.js,Next Router,我有一个页面可以有两个参数之一。电子邮件和散列如果没有,我想重定向用户 /confirm-email?email=user@email.com 我尝试了以下方法: const router = useRouter(); const { email, hash } = router.query; useEffect(() => { if (!email && !hash) { router.push('/'); } else if (hash) {
/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]);
但是第一次渲染时,这两个参数都是未定义的
,即使存在哈希或电子邮件参数,用户也会被重定向
我怎样才能解决这个问题?有什么建议吗
if (hash)
看起来不必要
及
query:Object-解析为对象的查询字符串。如果页面没有数据获取要求,则在预呈现期间它将是一个空对象。默认为{}
引用自
我想这就是问题所在
参数将是Router.query中的文件名
例如:
import { useRouter } from 'next/router'
const Post = () => {
const router = useRouter()
const { pid } = router.query
return <p>Post: {pid}</p>
}
export default Post
从“下一个/路由器”导入{useRouter}
const Post=()=>{
const router=useRouter()
const{pid}=router.query
返回Post:{pid}
}
导出默认帖子
对于pages/morepages/[pid].js中的文件[pid].js
或者,
要使用2个参数选项,您需要转到同时使用这两个选项的网站页面。所以它们之间必须有一个标签
比如“website/emial/hash”在做了一些研究之后。我发现最好检查参数是否存在于
getServerSideProps()中
尝试使用类似useRef的东西,并将值保留在那里,这样在第一次渲染时就不会检查任何内容,然后再次检查。所以基本上是一种更新的钩子。如果需要进一步的帮助,我可以在回答部分写下。我们不需要使用REF,即使我认为路由参数将覆盖同名的查询参数。你能分享你的文件名吗,这样我们就可以知道问题出在哪里了?这就是我强调的问题。您需要使用方括号。然后使用route.query引用“key”,即方括号中文件中的名称,而不是url中的值。与中一样,因为您没有使用动态路由,所以route.query没有指向任何内容。如果我执行confirm email/[somename].js
我如何知道该参数是电子邮件还是散列。我必须创建2个文件,然后。对吗?只有电子邮件或散列可用。两者不会同时出现。通过使用/[email]/[hash].js
来提供hash,我必须执行/user@email.com/散列
对吗?
export async function getServerSideProps({ query }) {
if (!query.email && !query.hash) {
return {
notFound: true,
};
}
return {
props: {},
};
}