react项目—路由和嵌套子路由(react-router4.0)


路由的问题一直疑惑,试着找百度上面的博客做一遍,心里有数了。

1、安装相关的包:

(1)npm install --save-dev react-router

(2)npm install --save-dev react-router-dom

(3)npm install --save react-router-config

在package.json中查看版本

2、配置路由

(1)新建路由文件 routes.js

          在src目录下建routes.js

代码如下所示:

 

 

注:(1)exact:

                是Route下的一条属性,一般而言,react路由会匹配所有匹配到的路由组价,exact能够使得路由的匹配更严格一些。

                值为bool型,为true是表示严格匹配,为false时为正常匹配。

                如在exact为true时,’/link’与’/’是不匹配的,但是在false的情况下它们又是匹配的。

       (2)嵌套子路由children,这里说明一下不一定必须用children,你可以用其它的词代替。但是我个人觉得,children辨识度                  高,在后面使用的时候也不会搞混。

(2)index.js文件

 

 

(3)组件中使用

  1.  
    import React from 'react';
  2.  
    import { Link } from 'react-router-dom';
  3.  
     
  4.  
    export default class NavigationBar extends React.Component {
  5.  
    constructor(props) {
  6.  
    super(props);
  7.  
    this.state = {}
  8.  
    }
  9.  
     
  10.  
    render (){
  11.  
    return(
  12.  
    <div>
  13.  
    <ul>
  14.  
    <li>
  15.  
    <Link to="/">首页</Link>
  16.  
    </li>
  17.  
    <li>
  18.  
    <Link to="/advantage">advantage</Link>
  19.  
    </li>
  20.  
    </ul>
  21.  
    </div>
  22.  
    )
  23.  
     
  24.  
    }
  25.  
    }

子路由(子页面):

  1.  
    import React from 'react';
  2.  
    import { Link } from 'react-router-dom';
  3.  
    import { renderRoutes } from 'react-router-config'
  4.  
     
  5.  
    export default class FyAdvantage extends React.Component {
  6.  
    constructor(props) {
  7.  
    super(props);
  8.  
    this.state = {
  9.  
    route: props.route,
  10.  
    }
  11.  
    }
  12.  
     
  13.  
    render (){
  14.  
    const route = this.state.route;
  15.  
    return(
  16.  
    <div>
  17.  
    {renderRoutes(route.children)}
  18.  
    <div>
  19.  
    <ul>
  20.  
    <li>
  21.  
    <Link to="/advantage/advantage1">advantage1</Link>
  22.  
    </li>
  23.  
    <li>
  24.  
    <Link to="/advantage/advantage2">advantage2</Link>
  25.  
    </li>
  26.  
    <li>
  27.  
    <Link to="/advantage/advantage3">advantage3</Link>
  28.  
    </li>
  29.  
    </ul>
  30.  
    </div>
  31.  
    </div>
  32.  
    )
  33.  
    }
  34.  
    }

注:(1)接受通过props传过来的route

       (2){renderRoutes(route.children)}是子页面的入口,子页面是在原来的页面的基础加载的,

                例:A是父页面,B和C是A的子页面。B、C是A的一部分,在加载B或C页面的时候,父页面A的内容依然存在,B或C                       的页面内容通过入口渲染在A页面中。 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM