术与器:Next.js 框架的基本应用
嗨,我是你稳定更新、持续输出的勾勾。
《道与法:React 服务端渲染的基本逻辑》让我们明白了其中的原理。本篇,让我们下凡进入术、器的应用层面感受一下。
其中 Vue 框架和 React 框架都有对应的比较成熟的 SSR 解决方案。React 对应的是 Next.js 框架,Vue 对应的就是 Nuxt.js。
当然,如果你对这些都不感兴趣,也可以自己实现一个 SSR 的服务端应用。我自己之前也写过一个,如果你感兴趣,想看看我实现的代码,可以留言给我,回头做成教程发出来。
我们以 React 对应的 Next.js 为例,来具体感受服务端渲染。先了解下 Next.js 的基本应用。
Next.js 框架
中文官网首页,已经介绍的非常清楚了:
https://www.nextjs.cn/
基本应用
安装部署
项目安装命令:npx create-next-app 或 npm init next-app my-next-project
运行:npm run dev 命令,启动项目。
同时,也可以查看 ./package.json 文件中的脚本配置。
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
这些脚本涉及开发应用程序的不同阶段:
dev - 运行 next dev,以开发模式启动 Next.js
build - 运行 next build,以构建用于生产环境的应用程序
start- 运行 next start,将启动 Next.js 生产环境服务器
访问 http://localhost:3000 即可查看我们的应用程序了。
页面路由
在 Next.js 中,页面是被放置在 pages 文件夹中的 Reac 组件,这是框架定义好的。
组件需要被默认导出,组件文件中不需要引入 React,页面地址与文件地址是对应的关系。
页面(page) 根据其文件名与路由关联。例如,pages/about.js 被映射到 /about。
在你的项目中的 pages 目录创建一个 about.js。
为 ./pages/about.js 文件填充如下内容:
// 类组件需要引入 react 继承
import React from 'react'
class AboutPage extends React.Component {
render(){
return <h3>class Component -- About Pageh3>
}
}
export default AboutPage
// 函数组件不需要引入 React
function AboutPage(){
return <h3>Function Component -- About Pageh3>
}
export default AboutPage
页面跳转
Link 组件默认使用 Javascript 进行页面跳转,即 SPA 形式的跳转。
如果浏览器中 Javascript 被禁用,则使用链接跳转 Link 组件中不应添加除 href 属性以外的属性,其余属性添加到 a 标签上。
Link组件通过 预取(在生产中)功能自动优化应用程序以获得最佳性能。
// 引入组件
import Link from 'next/link'
// 函数组件不需要引入 React
function AboutPage() {
return (
<div>
{/* Link 中必须要写 a 标签,href 必须写在 Link 中 */}
<Link href="/list"><a>Go to list Pagea>Link>
<h3>Function Componenth3>
div>
)
}
export default AboutPage
静态资源
应用程序根目录中的 public 文件夹用于存放静态资源,通过以下形式进行访问:public/img/1.png->/img/1.pngpublic/css/style.css->/css/style.css
import React from 'react'
class ListPage extends React.Component {
render(){
return <div>
<h3>ListPageh3>
{/* 引入图片文件 */}
<img src="/img/1.png" />
div>
}
}
export default ListPage
CSS样式
内置 styled-jsx:https://github.com/vercel/styled-jsx#readme
在 Next.js中内置了 styled-jsx ,它是一个CSS-in-JS库,允许在 React 组件中编写 CSS,CSS 仅作用于当前组件内部。
import React from 'react'
class ListPage extends React.Component {
render(){
return <div>
<h3 >ListPageh3>
<p className="pra"> 这是一个p标签里面的内容 p>
<style jsx>
{`
.pra{
color: red;
}
`}
style>
div>
}
}
export default ListPage
CSS模块
通过使用CSS模块功能,允许将组件的 CSS 样式编写在单独的 CSS 文件中。
CSS 模块约定样式文件的名称必须为: 组件文件名称.module.css
创建 ./pages/list.module.css 文件并填写如下内容:
.prag{
color:brown;
font-size: 20px;
}
import React from 'react'
// 引入样式文件
import ListStyle from './list.module.css'
class ListPage extends React.Component {
render(){
return <div>
<h3 >ListPageh3>
{/* 使用样式 */}
<p className={ListStyle.prag}> 这是一个p标签里面的内容 p>
div>
}
}
export default ListPage
全局样式文件
1:在 pages 文件夹中新建 _ app. js 文件(文件名固定)。
2:在项目根目录下创建 styles 文件夹,并在其中创建 global.css。
3:在 _app.js 中通过 import 引入 global.css。global.css 中的样式,将会全局起作用。
/pages/_app.js 文件中的内容如下:
import '../styles/globals.css'
// 固定代码
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
export default MyApp
| 在新版框架中,已经帮我们做好相关内容及文件和代码。
下篇内容,让我们康康 Next.js 的服务端渲染和静态站点生成解决方案。
推荐阅读:
点点“赞”和“在看”,保护头发,减少bug。