引言
在现代前端开发中,Next.js(基于 React)和 Nuxt.js(基于 Vue)是两款最受欢迎的全栈框架。它们都解决了单页应用(SPA)的 SEO 差、首屏加载慢等痛点,提供了服务端渲染(SSR)、静态站点生成(SSG)等能力。对于初学者而言,理解它们背后的原理和差异,是选择技术栈的关键一步。
一、核心原理:从 SPA 到 SSR/SSG
传统 SPA 在浏览器中动态渲染 DOM,爬虫难以抓取完整内容。Next.js 和 Nuxt.js 都采用同构渲染:在服务端生成 HTML 字符串,发送到浏览器后再进行“水合”(Hydration),让页面可交互。
- Next.js 基于 React,路由文件系统约定为
pages/或app/目录。每个文件即一个路由,组件导出后由框架自动映射。 - Nuxt.js 基于 Vue,使用
pages/目录约定,同样支持自动路由。其核心是 nuxt.config 配置和模块系统,内置 Vuex/Pinia 集成。
两者都支持构建时预渲染(SSG)和请求时渲染(SSR),但实现细节略有差异。
二、路由与页面:约定式开发体验
Next.js 示例
在 Next.js 13+ 的 App Router 中,app/page.js 对应根路径 /,app/blog/[id]/page.js 对应 /blog/:id。
// app/blog/[id]/page.js
export default async function Page({ params }) {
const res = await fetch(`https://api.example.com/posts/${params.id}`);
const post = await res.json();
return <div><h1>{post.title}</h1></div>;
}
默认组件为服务端组件(Server Component),可直接 async 获取数据,无需 useEffect。
Nuxt.js 示例
Nuxt 使用 pages/blog/[id].vue,并依托 Vue 组件响应式数据。
<!-- pages/blog/[id].vue -->
<script setup>
const route = useRoute();
const { data: post } = await useFetch(`https://api.example.com/posts/${route.params.id}`);
</script>
<template>
<div><h1>{{ post.title }}</h1></div>
</template>
评论 0
暂无评论。