next.js 配置部署

2,293 阅读1分钟

中文文档:Next.js

路由跳转Router VS Link

Router

import Router from 'next/router';

export default ({childre}) => (
    <div>
        <p onClick={()=>Router.push({
            pathname:'/detail',
            query:{arg:item}
        })>跳转到详情页<p>
    </div>
)
export default ({url}) => {
    <div>
        <h2>我是详情页</h2>
        <p>{url.query.arg}</p>
    </div>
}

Link

import Head from 'next/head';
import Link from 'next/router';

export default ({childre}) => (
    <div>
        <Head>
            <title>共同头部测试</title>
        </Head>
        <div>
            <Link href="/">主页</Link>
            <Link as="l" href="/list">列表</Link>
            <Link as="d" href="/detail">详情</Link>
        </div>
        {children}
        <footer>
            @版权所有,未经允许...
        </footer>
    </div>
)

路由预加载

标签添加prefetch属性

<Link href="/detail" prefetch> 详情</Link>

使用 withRouter 高阶组件

import withRouter from 'next/router';

export default withRouter(({children,router}) => {
    <div>
        <p onClick={()=>Router.push({
            pathname:'/detail',
            query:{arg:item}
        })>跳转到详情页<p>
        {router.prefetch('/detail')}
    </div>
})

路由的事件

routerChangeStart(url) //路由跳转开始
routerChangeComplete(url) //路由跳转完成
routerChangeError(err,url) //路由跳转失败
routerHistoryChange(url) //浏览历史改变

路由守卫

import Router from 'next/router';

Router.envents.on('routerChangeStart',(url)={
    if('url' === '/list'){
        location.href = './detail'
    }
})

redux

部署

next build -> next start