![React Cookbook中文版:87个案例带你精通React框架](https://wfqqreader-1252317822.image.myqcloud.com/cover/471/47491471/b_47491471.jpg)
1.4 使用Next.js管理服务端和客户端代码
问题
React能够生成客户端代码(虽然是在服务端生成的)。然而,有时你可能想把一些相对少量的API(应用程序编程接口)代码作为同一个React应用程序的一部分进行管理。
解决方案
Next.js是一个用于生成React应用程序和服务端代码的工具。API端点和客户端页面使用默认路由约定,这使得它们的创建和部署比你自己管理时更简单。你可以在官网(https://nextjs.org/)上找到Next.js的详细信息。
你可以用下面的命令创建Next.js应用程序:
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/28_01.jpg?sign=1739295772-fiN2IzA7r1ZZCMuD8GaoPqThRRrszGHn-0-4ecb3485209454dc182b636be882a1b4)
如果你已经安装了yarn,那么该命令会把yarn作为包管理器。你也可以通过--user-npm选项强制使用npm包管理器:
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/28_02.jpg?sign=1739295772-6m7w2XW6SiQaDLDSTbqYBUV9EvKOUrDr-0-adebac10155613c6c3363cae829e91b4)
该命令将在my-app子目录中创建Next.js应用程序。运行dev命令可以启动所创建的应用程序(见图1-6):
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/28_03.jpg?sign=1739295772-f5lDAznsATVtwLpGxk8j4zImYgke2FrN-0-8c36f616740ee5d950d8a22e80a8d5f5)
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/28_04.jpg?sign=1739295772-ETQlqjv6RV7eJLgE207vZGVfVn1IaKBr-0-6426e5ae656bb6e1d38d3cb891444523)
图1-6:在http://localhost:3000上访问Next.js页面
Next.js允许你在不需要管理任何路由配置的条件下创建页面。如果将组件添加到pages文件夹中,那么组件对应的页面将会立即在服务端生效。例如,pages/index.js组件会生成应用程序的主页。
这种方法与Gatsby注4所采用的方法类似,但在Next.js中更进一步地包含了服务端代码。
Next.js应用程序通常包括一些API服务端代码,这在React应用程序中是不常见的,因为React应用程序通常是独立于服务端代码的。但如果查看pages/api内部,你会发现一个服务器端点示例(名为hello.js的文件):
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/29_01.jpg?sign=1739295772-JKE4dmjtoexDZ2nj4zWKFQ4dA5JHl1Tq-0-e3dac99207f0acda821ca24bd9aa2e89)
Next.js会自动将路由挂载到端点api/hello。
Next.js将代码转译到一个名为.next的隐藏目录中,然后它就可以把该目录部署到Next.js自己的Vercel(https://vercel.com/)平台等服务中。
你可以用以下方法生成应用程序的静态版本:
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/29_02.jpg?sign=1739295772-hW3mDd0uFgJw3jWkchlRisBn9KStsytl-0-6e17ccea01d46bd964f69d1657b8752e)
export命令会在目录out中创建客户端代码。该命令会把每个页面都转换为静态渲染的HTML文件,这个文件在浏览器中加载很快。在页面的末尾,它会加载JavaScript版本来生成任意动态内容。
![](https://epubservercos.yuewen.com/2E539C/26886944502812306/epubprivate/OEBPS/Images/29_03.jpg?sign=1739295772-Bckwd9cmu21saMf0w1MUguwLdiSRp9lz-0-d3423b5eb7fca5d4fc44f8563bd4b723)
Next.js应用程序在打包后将不包括任何服务端API。
Next.js提供了多种数据获取选项,允许你从静态内容或通过无界面内容管理系统(CMS)源(https://oreil.ly/Xmia8)获取数据。
讨论
Next.js在很多方面都与Gatsby相似,倾向于以少量的配置来提升交付速度。对于服务端代码较少的团队来说,这可能是很好的选择。
你可以从GitHub网站(https://oreil.ly/9gbJs)下载本解决方案的源代码。