NextJS全栈入门
NextJS官网:https://www.nextjs.cn/
中文网:https://www.nextjs.cn/docs
Next.js 是一个基于 React 的框架,提供了一些在 React 中构建现代 Web 应用时常用的特性:
-
服务器端渲染 (SSR): Next.js 支持服务器端渲染,可以在服务器端生成页面的 HTML,从而改善 SEO 和提高首屏加载速度。对于需要快速索引的内容,SSR 是一种重要的优化手段。
-
静态站点生成 (SSG): Next.js 支持静态站点生成,可以在构建时预先生成所有页面的 HTML 文件,使得应用更快速,并且可以通过 CDN 进行分发。对于内容不频繁更新的网站,SSG 提供了极致的性能。
开始使用
创建nextjs应用:
npx create-next-app@latest
根据选项操作后启动应用:
npm run dev
导航
在src/pages
目录新建的文件会自动添加路由,例如新建一个src/pages/home.tsx
function HomePage() {
return <div>Welcome to Next.js!</div>
}
export default HomePage
在 Next.js 中,页面是从pages
目录中的文件导出的 React 组件,页面根据其文件名与路由关联,使用<Link>
可以对其他页面进行客户端导航。
import Link from "next/link"
function HomePage() {
return <div>
Welcome to Next.js!
<Link href={"https://www.nextjs.cn"}> next js </Link>
</div>
}
export default HomePage
这个功能是客户端导航,也就是跳转了浏览器没有加载整个页面,客户端导航意味着页面转换使用 JavaScript 进行,这比浏览器完成的默认导航更快。
静态资源
Next.js 可以在顶级 public
目录下提供静态文件,如图像。public
中的文件可以从应用程序的根目录引用,例如我有一个文件public/vercel.svg
,那么我可以使用:
<Image src="/next.svg" alt="Next.js Logo" width={48} height={48} />
想修改页面的元数据,比如 <title>
HTML 标签,可以使用Head
,<Head>
是内置 于 Next.js 中的 React 组件
<Head>
<title>
First Blog
</title>
</Head>
此时打开浏览器预览,会发现Tab标签页显示的Title是First Blog
样式布局:
定义基础布局在src/components/layout.tsx
:
export default function Layout({ children }) {
return (
<div className="container flex">
{children}
</div>
);
}
使用布局src/pages/index.tsx
:
export default function Index() {
return <>
<Layout>
<Head>
<title>
博客主页
</title>
</Head>
<h1>博客首页</h1>
<h2>
<Link href={"/home"}>回家</Link>
<br/>
<Link href={"/blog"}>博客内容</Link>
</h2>
</Layout>
</>
}
要加载全局 CSS 文件,请在 pages
下创建一个名为 _app.js
的文件,并添加以下内容
import './global.css'
export default function App({ Component, pageProps }) {
return <Component {...pageProps} />
}
此 App
组件是顶级组件,在所有不同的页面中都是通用的。例如,您可以使用此 App
组件在页面之间导航时保持状态。
预渲染
默认情况下,Next.js 会预渲染每个页面。这意味着 Next.js 会提前为每个页面生成 HTML,而不是全部由客户端 JavaScript 完成。预渲染可以带来更好的性能和 SEO。
生成的每个 HTML 都与该页面所需的最少 JavaScript 代码相关联。当浏览器加载页面时,其 JavaScript 代码将运行并使页面完全交互。(这个过程称为水化)
如果是普通React.js应用程序(没有 Next.js),则没有预渲染,因此如果禁用 JavaScript,将无法看到。
Next.js 有两种形式的预渲染:静态生成和服务器端渲染。区别在于它何时为页面生成 HTML。
- 静态生成:是在构建时生成 HTML 的预渲染方法。然后,在每个请求中重复使用预渲染的 HTML。
- 服务端渲染:是在每个请求上生成 HTML 的预渲染方法。
Next.js允许您选择要用于每个页面的预渲染表单。您可以通过对大多数页面使用静态生成,对其他页面使用服务器端渲染来创建“混合”Next.js应用程序。