1

我能够在成功登录后成功将用户重定向到相关仪表板页面。但是,在这种情况下,URI 被严重污染了'somedomain.com/v1/internal/salesman/dashboard?name=SomeName&email=someemail&uid=somenumber'。我希望做一些事情,redirect(<DashBoard someProps={someProps}/>而不是污染 URI。是否有可能在 NextJS 中实现我想要的?

const onSubmit = async (e) => {
    e.preventDefault();
    
    const server_path = process.env.SERVER_ADDRESS;
    try{
      const res = await fetch(`${server_path}api/v1/internal/salesman/signin`, {
        method: 'post',
        headers: {
          'Accept': 'application/json, text/plain, */*',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({email: email.val, password: password.val})
      });
      if(await res.status === 200){
        const data = await res.json();
        router.push({pathname: '/internal/salesman/dashboard', query: {name: data.name, email: data.email, uid: data.uid}});
      }
    } catch(error){
      console.log(error);
    }
    
  }
4

1 回答 1

1

您可以使用参数指定您希望看到的 URL 路径as

路由器.push

router.push(url, as, options)

as: UrlObject | String- 将在浏览器 URL 栏中显示的路径的可选装饰器。在 Next.js 9.5.3 之前,它用于动态路由,请查看我们之前的文档以了解它是如何工作的。注意:当此路径与上一个中提供的路径不同时,href将使用上一个文档hrefas所示的行为。

router.push(
  {
    pathname: '/internal/salesman/dashboard',
    query: {
      name: data.name,
      email: data.email,
      uid: data.uid,
    },
  },
  '/internal/salesman/dashboard',
);

如果您想实际重定向,则可以使用router.replace相同的参数。

于 2021-12-14T18:55:32.693 回答