Next.js 是 React 服务端渲染应用框架,用于构建 SEO 友好的 SPA 应用
npm init next-app 项目名
npm run dev
localhost:3000
// pages/list.js
export default function List () {
return <div> List page works </div>
}
pages/index.js
localhost:3000/
pages/list.js
localhost:3000/list
pages/post/first.js
localhost:3000/post/first
import Link from 'next/link'
<Link href="/list">
<a title="list page"> list page </a>
</Link>
应用程序根目录中的 public 文件夹用于提供静态资源
// pages/index.js
import Head from 'next/head'
export default function Home() {
return (<>
<Head>
<title> index page </title>
</Head>
<div> index page works </div>
</>)
}
// pages/index.js
import Head from 'next/head'
export default function List () {
return (<>
<Head>
<title> list page </title>
</Head>
<div> List page works </div>
</>)
}
在 Next.js 中内置了 styled-jsx,它是一个 CSS-in-JS 库,允许在 React 组件中编写 CSS,CSS 仅作用于组件内部
// pages/index.js
export default function Home() {
return (<>
<div>
index page works
</div>
<style jsx>{
`
div {
color: red;
}
`}</style>
</>)
}
// pages/list.js
import styles from './list.module.css'
export default function List () {
return (<div className={
styles.demo}> List page works </div>)
}
// pages/_app.js
import '../styles/globals.css'
function MyApp({
Component, pageProps }) {
return <Component {
...pageProps} />
}
export default MyApp
// styles/global.css
body {
background-color: pink;
}
在 Next.js 中支持两种形式的预渲染:静态生成和服务端渲染
export async function getStaticProps () {
// 从文件系统,API,数据库中获取的数据
const data = ...
// props 属性的值将会传递给组件
return {
props: ...
}
}
如果采用服务器端渲染,需要在组件中导出 getServerSideProps 方法
export async function getServerSideProps (context) {
// context 中会包含特定的请求参数
return {
props: {
// props for your component
}
}
}
export async function getStaticPaths() {
// 此处获取所有用户可以访问的路由参数
return {
// 返回固定格式的路由参数
paths: [{
params: {
id: "1"}}, {
patams: {
id: "2"}}],
// 当用户访问的路由参数没有在当前函数中返回时,是否显示 404 页面,flase:显示;true:不显示
fallback: false
}
}
exportasync function getStaticProps ({
params}) {
// params ---> {id: 1}
// 此处根据路由参数获取具体数据
return {
// 将数据传递到组件中进行静态页面的生成
props: {
}
}
}
要创建自定义 404 页面,需要在 pages 文件夹中创建 404.js 文件
export default function Custom404 () {
return <h1> 404 - Page Not Found </h1>
}
exoprt default function (req, res) {
res.status(200).send({
id: 1, name: 'Tom'})
}
注:当前 API Routes 可以接受任何 Http 请求方法