绝望中,如何使用Next.js路由React应用程序

tp5buhyn  于 2023-05-17  发布在  React
关注(0)|答案(1)|浏览(125)

我是Next.js的新手。我在Pages文件夹中有我的index.js,在Pages下的组件文件夹中有3个其他文件。在该文件夹中,我有一个Signup.js,Signin.js和Lostpassword.js。我想做的是让索引页面打开到Signup.js,然后能够单击登录链接并被重定向到SignIn.js,Lostpassword.js和相应的链接也是如此。
我知道Next.js做SSR,我认为我的问题是我没有掌握客户端渲染或其他东西背后的概念。我需要指导如何在next.js环境中集成完整的React组件。
我一直在网上寻找解决方案,但当你不确定你在寻找什么时,很难找到任何东西。
我能够获得索引页面以打开SignIn.js,但“组件内”的导航被破坏,我一直收到404错误。
我试过使用,但不断得到错误的文件,因为它呈现服务器端。所以,我尝试使用,但也没有工作。我试着修改路径,把所有的东西都放在页面下面,但没有用。

xmjla07d

xmjla07d1#

Next.js使用了一个称为以服务器为中心的路由的概念,另一个术语是基于文件系统的路由器。您可以在docs中的Next.js项目中了解路由。
在Next.js中,您可以使用link组件(阅读更多)路由用户,该组件在概念上类似于vanilla HTML中的a标记。或者,您可以使用next/router中的useRouterread more),其行为类似于react-router中的useHistory
为了达到你所描述的结果,我认为你有两个主要的选择。
1.您可以根据身份验证状态/用户操作动态呈现index.js中的组件。
1.您可以根据用户的身份验证状态将其路由到适当的页面(我推荐这种方法)。
作为第二个选项的伪代码示例,您的pages文件夹中将有一个与此类似的文件结构。对于基于文件系统的路由器,页面名称对应于路由路径:

├── index.js (example.com)
├── sign-in.js (example.com/sign-in)
├── sign-up.js (example.com/sign-up)
├── forgot-password.js (example.com/forgot-password)
└── foo
    ├── index.js (example.com/foo)
    └── bar.js (example.com/foo/bar)

在您的index.js

import { useRouter } from 'next/router';

//...

// route user based on authentication status
if(user is authenticated) {
   router.push("/foo/bar");
}
else if (user is not authenticated) {
   router.push("/sign-in");
}

在您的sign-in.js

import Link from 'next/link';

//...

<Link className="button" href="/forgot-password">Forgot Password</Link>

相关问题