1.两种路由跳转方式
1.1Link标签跳转
不支持兄弟标签并列的情况,需要嵌套一个父标签,下面的a标签。
//pages/index.js
import 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.js
import Link from 'next/link'
export default ()=>{
return (
<>
<div>这是about页面</div>
<div><Link href="/">回退 </Link></div>
</>
)
}
//pages/mine.js
import 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.js
import 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.js
import { 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)
})