1.两种路由跳转方式
1.1Link标签跳转
不支持兄弟标签并列的情况,需要嵌套一个父标签,下面的a标签。
//pages/index.jsimport React from 'react'import Link from 'next/link'export default ()=>{return (<><div><Link href="/about"><a>去about页面</a></Link></div><div><Link href="/mine"><a>去mine页面</a></Link></div></>)}
//pages/about.jsimport Link from 'next/link'export default ()=>{return (<><div>这是about页面</div><div><Link href="/">回退 </Link></div></>)}
//pages/mine.jsimport Link from 'next/link'export default ()=>{return (<><div>这是mine页面</div><div><Link href="/">回退 </Link></div></>)}
1.2router模块跳转
import Router from 'next/router'export default ()=>{const clickHandle=()=>{Router.push('/home/home')}return (<><button onClick={clickHandle}>跳转</button></>)}
2.路由传参
2.1标签传参
//index.jsimport Link from 'next/link'const Home = () => {return(<><div>我是首页</div><div><Link href="/av?name=波多野结衣"><a>选波多野结衣</a></Link><br/><Link href="/av?name=苍井空"><a>选苍井空</a></Link></div></>)}export default Home
//av.jsimport { withRouter} from 'next/router'import Link from 'next/link'const Av = ({router})=>{return (<><div>{router.query.name},来为我们服务了.</div><Link href="/"><a>返回首页</a></Link></>)}export default withRouter(Av)
2.2编程式传参
import React from 'react'import Router from 'next/router'const Home = () => {const getData=()=>{Router.push({pathname:"/av",query:{name:'小泽玛丽亚'}})}return(<><div>我是首页</div><button onClick={getData}>点击获取</button></>)}export default Home
3.路由钩子事件
3.1 routeChangeStart
这个时路由发生变化时,时间第一时间被监听到,并执行了里边的方法。
import Router from 'next/router'Router.events.on('routeChangeStart',(...args)=>{console.log('1.routeChangeStart->路由开始变化,参数为:',...args)})
3.2routeChangeComplete
路由变化开始时可以监听到,那结束时也时可以监听到的
import Router from 'next/router'Router.events.on('routeChangeComplete',(...args)=>{console.log('routeChangeComplete->路由结束变化,参数为:',...args)})
3.3beforeHistoryChange
history就是HTML中的API,如果这个不了解可以百度了解一下,Next.js路由变化默认都是通过history进行的,所以每次都会调用。 不适用history的话,也可以通过hash
Router.events.on('beforeHistoryChange',(...args)=>{console.log('3,beforeHistoryChange->在改变浏览器 history之前触发,参数为:',...args)})
3.4routeChangeError
需要注意的是404找不到路由页面不算错误
Router.events.on('routeChangeError',(...args)=>{console.log('4,routeChangeError->跳转发生错误,参数为:',...args)})
3.5hashChangeStart
hash模式下路由开始发生变化时
Router.events.on('hashChangeStart',(...args)=>{console.log('5,hashChangeStart->hash跳转开始时执行,参数为:',...args)})
3.6hashChangeComplete
hash模式下路由变化结束
Router.events.on('hashChangeComplete',(...args)=>{console.log('6,hashChangeComplete->hash跳转完成时,参数为:',...args)})
