美文网首页
也来写一篇Router4出坑指南

也来写一篇Router4出坑指南

作者: 追风的云月 | 来源:发表于2018-04-12 15:03 被阅读0次

需求:实现一个有登录、404和主页路由的单页应用。
功能分析:有登录、404、主页三个主路由,主页是一个单页应用,点击左侧的菜单,右边的组件部分会切换。
效果图如下:


image.png
import React, {Component} from 'react';
import {
    BrowserRouter,
    Route,
    Link,
    Redirect,
    Switch
} from 'react-router-dom'
import MyLayout from '../layout/layout'
import TableDemo from '../testComponent/tableDemo'
import FormDemo from '../testComponent/formDemo'

const page404 = ()=>(
    <div>404</div>
)
const login=()=>(
    <h1>登录页</h1>
)
class Routes extends Component {
    render() {
        return (
            <BrowserRouter>
//Switch用于匹配唯一Route 不使用的会报错
                <Switch>
                    <Route path="/login"  component={login}/>
                    <Route path='/404' component={page404}/>
//路由为'/'一定要写在最后 不然会被匹配多次
//利用Route的render方法实现嵌套
//这里的{history,location}参数,浏览器会自动传入 不用显示传入
                    <Route path="/" render={({history,location}) => (
                        <MyLayout history={history} location={location}>
                            <Switch>
                                <Route path="/" exact component={TableDemo}/>
                                <Route path="/tableDemo"  component={TableDemo}/>
                                <Route path="/formDemo"  component={FormDemo}/>
//Redirect 一定要写在这里 当前面三个路由都不匹配 就会重定向至404页面
                                <Redirect to='/404'/>
                            </Switch>
                        </MyLayout>
                    )} />
                </Switch>
            </BrowserRouter>
        )
    }
}
export default Routes
v4版本与v3写法很大不同在于,不再支持v3的嵌套式路由写法。在上述代码中,通过Route的render方法可以实现路由嵌套写法,并且在MyLayout组件中,仍能通过this.props.children访问到嵌套的子路由。
export default class MyLayout extends Component{
    render(){
        return(
            <Layout style={{height:"100%"}}>
                <Sider>
                    <Menu theme="dark"
                          openKeys={["sub1"]}
                          mode="inline">
                        <SubMenu key="sub1" title={<span>菜单栏</span>}>
                            <Link to='/tableDemo'>Table</Link>
                           <Link to='/formDemo'>Form</Link>
                        </SubMenu>
                    </Menu>
                </Sider>
                <Layout>
                    <div className={style.red}>{this.props.children}</div>
                </Layout>
            </Layout>
        )
    }
}

没有IndexRoute的情况下配置默认路由 使用Redirect

<Switch>
    <Route path={`${UPPER_PATH}/user`} component={UserManageCtnr} />
    <Route path={`${UPPER_PATH}/character`} component={()=>(<div>character</div>)} />
    <Route path={`${UPPER_PATH}/adapter`} component={AdapterManageCtnr} />
    <Redirect exact path={`${UPPER_PATH}`} to={{pathname: `${UPPER_PATH}/user`}} />
</Switch>

相关文章

  • 也来写一篇Router4出坑指南

    需求:实现一个有登录、404和主页路由的单页应用。功能分析:有登录、404、主页三个主路由,主页是一个单页应用,点...

  • Scalers:你配得上谁,谁配得上你

    2017年我给自己挖了一个坑,我写了一篇文章《你出题,我来写,写不出来算我输》,让大家给我出作文题,我来写作。一瞬...

  • JavaScrip-StepPitGuide《JavaScrip

    《JavaScript踩坑指南》JavaScrip-StepPitGuide? 《JavaScript踩坑指南》 ...

  • Android JNI出坑指南

    在Android编程中,出于硬件交互,跨平台,安全性,第三方库等方面的考虑,我们需要Java与C/C++互相调用,...

  • 进入币圈炒币1年,我人格分裂了

    防追涨杀跌的指南 今天小韭菜群里,韭菜侠发了一篇数字货币投资的防掉坑指南,其中关于如何防止追涨杀跌的指南,得到标叔...

  • 重疾险闭坑指南

    重疾险避坑指南 #避坑指南 #重疾险 坑一:重疾含身故 其实只能赔一个,赔了重疾,身故就赔不了了。保费贵,保障也没...

  • 在二线城市当个菜菜产品

    很久没有写产品相关的文章了,也来写一写从15年9月入坑到现在,做产品的一些心得感悟,欢迎交流探讨或者拉我出坑。 刚...

  • 闲来无恙,推荐出坑指南

    每次经过cy大厦,看到许多闲坐大厅的人,难道都是找工作的吗?后来才得知都是讨要工资的难民。 你找到之前的深(公司)...

  • 机械键盘入坑指南

    机械键盘入坑指南

  • 新手如何制定自己的跑步计划

    上周写了一篇“初级跑者指南”,今天来写一篇新手如何制定自己的跑步计划。 这些文字只给想开始跑步的人看,有人就是不爱...

网友评论

      本文标题:也来写一篇Router4出坑指南

      本文链接:https://www.haomeiwen.com/subject/laixkftx.html