我正在学习使用NextJS,并且正在使用最新版本的App Router,目前我遇到了路由问题,例如在哪里放置注册和登录页面,以及它们的文件夹结构,我应该把组件放在哪里,如何将其他相关组件分组,您能否为我解决这个问题,并尽可能简单地给出一些示例,因为我还在学习,任何帮助都将不胜感激,谢谢!
我正在学习使用NextJS,并且正在使用最新版本的App Router,目前我遇到了路由问题,例如在哪里放置注册和登录页面,以及它们的文件夹结构,我应该把组件放在哪里,如何将其他相关组件分组,您能否为我解决这个问题,并尽可能简单地给出一些示例,因为我还在学习,任何帮助都将不胜感激,谢谢!
https://nextjs.org/docs/app/building-your-application/routing/colocation
我尝试了许多不同的结构,最终选择了这个。/app/(routes)/login/page.tsx
。如果你有一个特定于登录页面的“组件”,把它放在登录路由文件夹中是否合理?还是将其移到组件目录中,并只在(routes)文件夹中保留page.tsx和layout.tsx文件? - Joesrc
文件夹时,这才有意义。如果你使用了src
文件夹,请使用下面@Yilmaz的答案。 - NSjonas/app
目录内。你也可以将组件放置在任何页面的文件夹内。/app
/components
/dashboard
customComponent.tsx
page.tsx
layout.tsx
page.tsx
如果想了解更多有关文件约定的内容,请阅读本文: https://nextjs.org/docs/app/building-your-application/routing
app/_components
)来忽略路由中的目录。 - undefined在最新的App路由器版本中,您可以使用各种路由甚至自定义路由以使用自己的定制路由。
使用Next.js App路由器的默认路由: 要创建页面,您可以直接创建一个带有页面名称的文件夹 例如关于页面,创建关于文件夹,创建page.jsx(在关于文件夹内,作为关于索引页面,即可通过URL /about访问) 应用程序 /关于 page.jsx
2.) 实现自定义路由
您可以在next-config中添加
async rewrites() {
return [
{
source: '/old-route',
destination: '/new-route',
},
// Add more custom routes as needed
];
当我开始研究目录结构时,我已经做了很多研究。为了最佳实践,我直接在App目录中创建页面,例如all/products/page.jsx或app/about/page.jsx。
对于管理界面,我使用app/admin/pagenameofadmin/page.jsx和app/admin/page.tsx(管理员主页)。
对于所有其他组件,请使用components文件夹,并在其中创建子文件夹以便轻松查找组件。
布局 - 用于常见和重复的组件,如标题/页脚/侧边栏 auth - 用于登录注册相关组件 admin - 用于管理界面组件 pagename - 用于特定页面组件
如果您想在下一级保持所有内容有序,还可以为特定内容类型创建文件夹,但我建议仅在复杂项目中使用它。 product - 用于产品相关组件
将API保留在app/utils文件夹中。
在你的Next.js项目根目录下创建一个pages目录。这是你放置与不同路由对应的页面组件的地方。
在pages目录下创建一个auth目录,将所有与身份验证相关的页面组织在一起。例如:
pages/
auth/
login.js
register.js
在login.js和register.js文件中,你可以创建登录和注册页面组件。例如:
// pages/auth/login.js
const LoginPage = () => {
return <div>Login page</div>;
};
export default LoginPage;
接下来创建一个名为register.js的页面:
// pages/auth/register.js
const RegisterPage = () => {
return <div>Register page</div>;
};
export default RegisterPage;
要设置路由,你可以使用Next.js内置的App组件和next/router模块中的Router。以下是如何配置路由的示例:
// pages/_app.js
import { useRouter } from 'next/router';
const MyApp = ({ Component, pageProps }) => {
const router = useRouter();
// 检查当前路由是否是身份验证路由
const isAuthRoute = router.pathname.startsWith('/auth');
// 在这里可以执行任何通用布局或逻辑
// 为身份验证页面添加布局或特定于身份验证的逻辑
if (isAuthRoute) {
// 在这里添加身份验证布局或逻辑(如果需要)
// 例如,你可以添加一个通用的导航组件
// 或者应用特定于身份验证页面的样式
return ;
}
// 对于非身份验证页面,你可以应用不同的布局或逻辑
// 或者直接返回组件本身
return ;
};
export default MyApp;
pages/
相同级别的位置创建一个components/
文件夹(pages
用于路由)。该结构在此处被暗示 https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts。 - Andy Ray