连续复制
一键复制
一键打包
01.next基础.md
md
全局安装脚手架
npm install -g create-next-app
创建项目
create-next-app demo02
或者忽略上面的操作
使用 npx 直接创建项目:npx create-next-app next-create
标签导航和编程导航
import React from "react";
import Link from "next/link";
import Router from "next/router";
export default function Home() {
function handleClick() {
Router.push("/jspang");
}
return (
<div>
{/* 导航式调整 */}
<Link href="/">跳转首页</Link>
<Link href="/jspang">
<div style={{ display: "inline-block" }}>
<span>跳转jspan页面</span>
<span>---</span>
</div>
</Link>
{/* 编程式导航 */}
<div>
<button onClick={handleClick}>跳转jspan页面</button>
</div>
</div>
);
}
路由传参
export default function Home() {
function handleClick() {
Router.push({
pathname: "/test2",
query: {
id: 2,
},
});
}
return (
<div>
{/* 导航式调整 */}
<Link href={{ pathname: "/test2", query: { id: 1, } }}>
<div style={{ display: "inline-block" }}>
<span>跳转test2页面</span>
<span>---</span>
</div>
</Link>
{/* 编程式导航 */}
<div>
<button onClick={handleClick}>跳转test2页面</button>
</div>
</div>
);
}
import { withRouter } from "next/router";
// 如果不用 withRouter 是获取不到路由参数的
export default withRouter(({router}) => {
return (
<div>
hello Test2 -- > {JSON.stringify(router.query)}
</div >
);
})
02.路由钩子.md
md
export default function Home() {
// history模式 路由跳转前触发
Router.events.on("routeChangeStart", (...args) => {
console.log('路由跳转前触发,参数为:', args);
});
// history模式 路由跳转时触发
Router.events.on("beforeHistoryChange", (...args) => {
console.log('路由跳转时触发,参数为:', args);
});
// history模式 路由跳转后触发
Router.events.on("routeChangeComplete", (...args) => {
console.log('路由跳转后触发,参数为:', args);
});
// 路由出错时触发(请求数据发生错误时会触发该事件)
Router.events.on("routeChangeError", (...args) => {
console.log('路由发生错误,参数为:', args);
});
// hash模式 路由跳转时触发
Router.events.on("hashChangeStart", (...args) => {
console.log('路由跳转时触发,参数为:', args);
});
// hash模式 路由跳转后触发
Router.events.on("hashChangeComplete", (...args) => {
console.log('路由跳转后触发,参数为:', args);
});
return (
<div>
{/* 导航式跳转 */}
<Link href={{ pathname: "/test2", query: { id: 1, } }}> 跳转test2页面 </Link>
{/* hash式路由 */}
<Link href="#jspang"> hash式路由跳转 </Link>
</div>
);
}
03.远程获取数据.md
md
安装包
yarn add axios
示例
import { withRouter } from "next/router";
// 所有的请求只能写在 getInitialProps 中
Home.getInitialProps = async () => {
// 假设这是一个远程请求
const result = new Promise((resolve, reject) => {
// 返回数据, { userInfo: {...} }
resolve({
userInfo: {
name: "小明",
age: 18,
},
});
});
return await result;
}
function Home(props) {
// props.userInfo 就是上面 resolve 返回的 userInfo: {...} 数据
console.log(props.userInfo);
return (
<div>
<h1>远端获取到的数据</h1>
<p>姓名:{props.userInfo.name}</p>
<p>年龄:{props.userInfo.age}</p>
</div>
);
}
export default withRouter(Home);
04.使用style jsx编写页面的css.md
md
export default withRouter(()=>{
const [color, setColor] = useState("#fff");
function hanldeClick(){
const r = Math.floor(Math.random() * 255);
const g = Math.floor(Math.random() * 255);
const b = Math.floor(Math.random() * 255);
setColor(`rgb(${r}, ${g}, ${b})`);
}
return (
<div>
<h1>hello world</h1>
<button onClick={hanldeClick}>点击改变颜色</button>
<style jsx>
{
`
h1{
color: ${color};
background-color: red;
}
`
}
</style>
</div>
);
});
05.模块懒加载.md
md
第三方模块懒加载
export default withRouter(() => {
const [nowTime, setTime] = useState(Date.now());
const handleClick = async () => {
// 使用时在引入
const moment = await import("moment");
setTime(moment.default(Date.now()).format());
}
return (
<div>
<p>显示时间为:{nowTime}</p>
<p>
<button onClick={handleClick}>点击格式化时间</button>
</p>
</div>
);
});
自定义组件懒加载
// 引入 next 框架提供的dynamic方法
import dynamic from "next/dynamic";
// 引入组件,现在不会被加载,只有在页面中使用了才会被加载
const One = dynamic(import("../components/one"));
export default withRouter(() => {
return (
<div>
<One></One>
</div>
);
});
06.自定义Head.md
md
// 引入 Head 组件
import Head from "next/head";
export default withRouter(() => {
return (
<div>
{/* Head组件和html中的head标签含义都是一样的 */}
<Head>
<title>这是主页</title>
</Head>
</div>
);
});
07.使用Antd UI框架.md
md
老版本配置
安装包
yarn add antd
yarn add @zeit/next-css --> 让next支持css引入
根目录新建
next.config.js
文件
const withCss = require("@zeit/next-css");
//官方规定写法
if(typeof require !== "undefined"){
require.extensions[".css"] = file => {};
}
module.exports = withCss({});
babel 按需加载,下载包
yarn add babel-plugin-import
根目录新建
.babelrc
文件
{
"presets": [
"next/babel"
], //沿用以前的配置,不做改变
"plugins": [ //自己写的配置
[
"import",
{
"libraryName": "antd",//antd的js文件按需加载
"style": "css" //按需加载css
}
]
]
}
新版本
下载包
yarn add antd
pages/_app.js
// 头部引入antd的样式即可
import 'antd/dist/antd.css';
目录
├── 01.next基础.md
├── 02.路由钩子.md
├── 03.远程获取数据.md
├── 04.使用style jsx编写页面的css.md
├── 05.模块懒加载.md
├── 06.自定义Head.md
├── 07.使用Antd UI框架.md
评论已关闭