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页面中。 

posted @   雪莉06  阅读(2731)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
历史上的今天:
2015-10-21 CSS实现背景透明而背景上的文字不透明完美解决
点击右上角即可分享
微信分享提示