首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果参数不存在,如何重定向Next.JS

如果参数不存在,如何重定向Next.JS
EN

Stack Overflow用户
提问于 2021-05-28 02:29:32
回答 2查看 877关注 0票数 0

我有一个页面,可以有2个参数之一。电子邮件和哈希,如果没有存在,我想重定向用户。

代码语言:javascript
代码运行次数:0
运行
复制
/confirm-email?email=user@email.com

我尝试过以下几种方法:

代码语言:javascript
代码运行次数:0
运行
复制
const router = useRouter();
const { email, hash } = router.query;

useEffect(() => {
  if (!email && !hash) {
    router.push('/');
  } else if (hash) {
    // Do stuff
  }
}, [email, hash, router]);

但在第一次渲染时的问题是,它们都是undefined,即使存在散列或电子邮件参数,用户也会被重定向。

我该如何解决这个问题呢?有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-28 05:10:30

在做了一些研究之后。我发现最好检查一下getServerSideProps()中的参数是否存在

代码语言:javascript
代码运行次数:0
运行
复制
export async function getServerSideProps({ query }) {
  if (!query.email && !query.hash) {
    return {
      notFound: true,
    };
  }

  return {
    props: {},
  };
}
票数 0
EN

Stack Overflow用户

发布于 2021-05-28 02:39:07

代码语言:javascript
代码运行次数:0
运行
复制
if (hash)

看起来没必要。

query: object -解析为对象的查询字符串。如果页面没有数据获取要求,那么在预渲染期间它将是一个空对象。默认为{}

引用自https://nextjs.org/docs/api-reference/next/router

我认为这就是问题所在。

参数将是Router.query中的文件名

例如:

代码语言:javascript
代码运行次数:0
运行
复制
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”

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67727978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档