Next.js SSR优点
- 搭建轻松
- 自带数据同步SSR
- 丰富插件 自己形成生态
- 灵活配置
create-next-app
路由
必须withRouter包裹组件,才能获取{router},只能通过router.query获取参数
生命周期
- routerChangeStart 路由变化之前触发
- routeChangeComplete 路由变化完成触发
- beforeHistoryChange 在改变浏览器history之前触发
- routeChangeError 路由跳转时发生错误时触发
- hashChangeStart hash开始跳转时触发
- hashChangeComplete hash跳转完成时触发
静态方法getInitialProps
xiaojiejie.getInitialProps = async()=> {
// 请求数据
}
在style jsx中编写css
注意css文件在next.js不支持import引入,而需要在style jsx下编写
function kang(){
return (
<>
<button>康</button>
<div className="kang">康</div>
<style jsx>
{
`
.kang{color:red}
`
}
</style>
</>
)
}
export default kang
建议看文档,最新版的next和旧版外部引入css不一样
https://www.nextjs.cn/docs/basic-features/built-in-css-support
异步加载模块和组件
- 异步加载模块 import()函数
- 异步加载组件 next下的dynamic模块
import React,{useState} from 'react'
import dynamic from 'next/dynamic'
// 异步加载组件 dynamic
const One = dynamic(import('../components/one'))
function Time() {
const [nowTime,setTime] = useState(Date.now())
const changeTime = async () => {
// 异步加载模块 import
const moment = await import('moment')
setTime(moment.default(Date.now()).format())
}
return (
<>
<div>显示时间为:{nowTime}</div>
<One></One>
<div>
<button onClick={changeTime}>改变时间格式</button>
</div>
</>
)
}
export default Time
next下的head
import Head from 'next/head'
const MyHeader = () => {
return (
<>
<Head>
<title>Kangshenglone.top</title>
</Head>
</>
)
}
export default MyHeader
yarn start 和yarn dev的区别
- yarn dev是在开发环境下运行
- yarn start是在线上环境运行
在next.js引入antd框架
12.0.7版本下的next.js,在全局_app.js
(没有自己创建)引入样式
import 'antd/dist/antd.css'
export default App
坑
- next的Link只支持一个标签
- css引入看官方文档
- 用来hooks函数export抛出名必须大写