{post.title}
{post.body}
如果你正在学习前端开发,一定听过React的大名。但React只是一个库,要搭建完整的应用,你还需要路由、数据获取、SEO优化等能力——这时候Next.js就登场了!作为React的“超集框架”,Next.js提供了:
无论你是想开发博客、电商网站,还是企业级应用,Next.js都能让开发效率翻倍。下面我们从零开始,手把手带你掌握Next.js核心技能!
确保已安装Node.js(建议LTS版本 ≥18.x),打开终端输入:
node -v # 检查版本
npm -v # 检查npm
使用官方脚手架工具create-next-app
,快速生成项目:
npx create-next-app@latest my-next-app
按提示选择配置(推荐默认设置),完成后进入项目目录:
cd my-next-app
npm run dev
访问http://localhost:3000
,看到欢迎页面即成功!
my-next-app/
├── app/ # 页面和布局(App Router模式)
├── pages/ # 页面路由(传统模式)
├── public/ # 静态资源(图片、字体)
├── styles/ # CSS文件
├── components/ # 可复用组件
└── package.json # 依赖管理
注意:Next.js 13+推荐使用
app
目录(App Router),但传统pages
目录依然兼容,本文以app
目录为例。
在app
目录下新建文件夹,文件夹名即路由路径。例如:
app/about/page.js
→ /about
app/blog/[id]/page.js
→ /blog/123
// app/home/page.js
export default function Home() {
return (
欢迎来到Next.js世界!
关于我们
)
}
使用方括号[param]
定义动态参数:
// app/blog/[id]/page.js
export default function BlogPage({ params }) {
return 博客ID: {params.id}
}
访问/blog/42
将显示“博客ID: 42”。
在构建时获取数据,适合内容不变的页面:
// app/products/page.js
async function getProducts() {
const res = await fetch('https://api.example.com/products');
return res.json();
}
export default async function ProductsPage() {
const products = await getProducts();
return (
{products.map((product) => (
- {product.name}
))}
)
}
每次请求时获取最新数据:
// app/news/page.js
async function getNews() {
const res = await fetch('https://api.example.com/news', {
cache: 'no-store' // 禁用缓存
});
return res.json();
}
export default async function NewsPage() {
const news = await getNews();
// 渲染逻辑...
}
在app/api
目录下创建API端点:
// app/api/hello/route.js
export async function GET() {
return Response.json({ message: 'Hello Next.js!' });
}
访问/api/hello
将返回JSON数据:
{ "message": "Hello Next.js!" }
// app/blog/page.js
async function getPosts() {
const res = await fetch('https://jsonplaceholder.typicode.com/posts');
return res.json();
}
export default async function BlogPage() {
const posts = await getPosts();
return (
{posts.map(post => (
{post.title}
{post.body}
))}
)
}
// app/blog/[id]/page.js
export default async function BlogDetail({ params }) {
const res = await fetch(
`https://jsonplaceholder.typicode.com/posts/${params.id}`
);
const post = await res.json();
return (
{post.title}
{post.body}
)
}
next/image
组件自动优化图片通过本文,你已经掌握了Next.js的核心功能:文件路由、数据获取、API开发和部署。Next.js极大地简化了全栈开发流程,让你能更专注于业务逻辑。现在,尝试用Next.js动手搭建你的第一个项目吧!
延伸资源:
动手练习:
遇到问题?欢迎在评论区留言讨论!