• React 全栈体系(十)


    第五章 React 路由

    三、基本路由使用

    7. 代码 - Switch 的使用

    7.1 Test
    /* src/pages/Test/index.jsx */
    import React, { Component } from 'react'
    
    export default class Test extends Component {
    	render() {
    		return (
    			<div>
    				<h2>Test....</h2>
    			</div>
    		)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    7.2 App
    /* src/App.jsx */
    import React, { Component } from "react";
    import { Route, Switch } from "react-router-dom";
    import Home from "./pages/Home"; //Home是路由组件
    import About from "./pages/About"; //About是路由组件
    import Test from "./pages/Test";
    import Header from "./components/Header"; //Header是一般组件
    import MyNavLink from "./components/MyNavLink";
    
    export default class App extends Component {
      render() {
        return (
          <div>
            <div className="row">
              <div className="col-xs-offset-2 col-xs-8">
                <Header />
              </div>
            </div>
            <div className="row">
              <div className="col-xs-2 col-xs-offset-2">
                <div className="list-group">
                  <MyNavLink to="/about">About</MyNavLink>
                  <MyNavLink to="/home">Home</MyNavLink>
                </div>
              </div>
              <div className="col-xs-6">
                <div className="panel">
                  <div className="panel-body">
                    {/* 注册路由 */}
                    <Switch>
                      <Route path="/about" component={About} />
                      <Route path="/home" component={Home} />
                      <Route path="/home" component={Test} />
                    </Switch>
                  </div>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    请添加图片描述

    7.3 总结
    1.通常情况下,path和component是一一对应的关系。
    2.Switch可以提高路由匹配效率(单一匹配)
    • 1
    • 2

    8. 代码 - 解决样式丢失问题

    8.1 index
    
    DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8" />
    		<title>React Apptitle>
    		<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    		<link rel="stylesheet" href="/css/bootstrap.css">
    		<style>
    			.alex{
    				background-color: rgb(209, 137, 4) !important;
    				color: white !important;
    			}
    		style>
    	head>
    	<body>
    		<div id="root">div>
    	body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    8.2 App
    /* src/App.jsx */
    import React, { Component } from "react";
    import { Route, Switch } from "react-router-dom";
    import Home from "./pages/Home"; //Home是路由组件
    import About from "./pages/About"; //About是路由组件
    import Header from "./components/Header"; //Header是一般组件
    import MyNavLink from "./components/MyNavLink";
    
    export default class App extends Component {
      render() {
        return (
          <div>
            <div className="row">
              <div className="col-xs-offset-2 col-xs-8">
                <Header />
              </div>
            </div>
            <div className="row">
              <div className="col-xs-2 col-xs-offset-2">
                <div className="list-group">
                  <MyNavLink to="/alex/about">About</MyNavLink>
                  <MyNavLink to="/alex/home">Home</MyNavLink>
                </div>
              </div>
              <div className="col-xs-6">
                <div className="panel">
                  <div className="panel-body">
                    {/* 注册路由 */}
                    <Switch>
                      <Route path="/alex/about" component={About} />
                      <Route path="/alex/home" component={Home} />
                    </Switch>
                  </div>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    8.3 总结
    1.public/index.html 中 引入样式时不写 ./ 写 / (常用)
    2.public/index.html 中 引入样式时不写 ./ 写 %PUBLIC_URL% (常用)
    3.使用HashRouter
    
    • 1
    • 2
    • 3

    9. 代码 - 路由的模糊匹配与严格匹配

    9.1 App
    /* src/App.jsx */
    import React, { Component } from "react";
    import { Route, Switch } from "react-router-dom";
    import Home from "./pages/Home"; //Home是路由组件
    import About from "./pages/About"; //About是路由组件
    import Header from "./components/Header"; //Header是一般组件
    import MyNavLink from "./components/MyNavLink";
    
    export default class App extends Component {
      render() {
        return (
          <div>
            <div className="row">
              <div className="col-xs-offset-2 col-xs-8">
                <Header />
              </div>
            </div>
            <div className="row">
              <div className="col-xs-2 col-xs-offset-2">
                <div className="list-group">
                  <MyNavLink to="/about">About</MyNavLink>
                  <MyNavLink to="/home">Home</MyNavLink>
                </div>
              </div>
              <div className="col-xs-6">
                <div className="panel">
                  <div className="panel-body">
                    {/* 注册路由 */}
                    <Switch>
                      <Route exact path="/about" component={About} />
                      <Route exact path="/home" component={Home} />
                    </Switch>
                  </div>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    9.2 总结
    1.默认使用的是模糊匹配(简单记:【输入的路径】必须包含要【匹配的路径】,且顺序要一致)
    2.开启严格匹配:<Route exact={true} path="/about" component={About}/>
    3.严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由
    
    • 1
    • 2
    • 3

    10. 代码 - Redirect 的使用

    10.1 App
    /* src/App.jsx */
    import React, { Component } from "react";
    import { Route, Switch, Redirect } from "react-router-dom";
    import Home from "./pages/Home"; //Home是路由组件
    import About from "./pages/About"; //About是路由组件
    import Header from "./components/Header"; //Header是一般组件
    import MyNavLink from "./components/MyNavLink";
    
    export default class App extends Component {
      render() {
        return (
          <div>
            <div className="row">
              <div className="col-xs-offset-2 col-xs-8">
                <Header />
              </div>
            </div>
            <div className="row">
              <div className="col-xs-2 col-xs-offset-2">
                <div className="list-group">
                  <MyNavLink to="/about">About</MyNavLink>
                  <MyNavLink to="/home">Home</MyNavLink>
                </div>
              </div>
              <div className="col-xs-6">
                <div className="panel">
                  <div className="panel-body">
                    {/* 注册路由 */}
                    <Switch>
                      <Route path="/about" component={About} />
                      <Route path="/home" component={Home} />
                      <Redirect to="/about" />
                    </Switch>
                  </div>
                </div>
              </div>
            </div>
          </div>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    请添加图片描述

    10.2 总结
    1.一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由
    2.具体编码:
    	<Switch>
    		<Route path="/about" component={About}/>
    		<Route path="/home" component={Home}/>
    		<Redirect to="/about"/>
    	</Switch>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    四、嵌套路由使用

    1. 效果

    请添加图片描述

    2. 代码

    请添加图片描述

    2.1 News
    /* src/pages/Home/News/index.jsx */
    import React, { Component } from "react";
    
    export default class News extends Component {
      render() {
        return (
          <ul>
            <li>news001</li>
            <li>news002</li>
            <li>news003</li>
          </ul>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2.2 Message
    /* src/pages/Home/Message/index.jsx */
    import React, { Component } from "react";
    
    export default class Message extends Component {
      render() {
        return (
          <div>
            <ul>
              <li>
                <a href="/message1">message001</a>&nbsp;&nbsp;
              </li>
              <li>
                <a href="/message2">message002</a>&nbsp;&nbsp;
              </li>
              <li>
                <a href="/message3">message003</a>&nbsp;&nbsp;
              </li>
            </ul>
          </div>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    2.3 Home
    /* src/pages/Home/index.jsx */
    import React, { Component } from "react";
    import MyNavLink from "../../components/MyNavLink";
    import { Route, Switch, Redirect } from "react-router-dom";
    import News from "./News";
    import Message from "./Message";
    
    export default class index extends Component {
      render() {
        return (
          <div>
            <h3>我是Home的内容</h3>
            <div>
              <ul className="nav nav-tabs">
                <li>
                  <MyNavLink to="/home/news">News</MyNavLink>
                </li>
                <li>
                  <MyNavLink to="/home/message">Message</MyNavLink>
                </li>
              </ul>
              {/* 注册路由 */}
              <Switch>
                <Route path="/home/news" component={News} />
                <Route path="/home/message" component={Message} />
                <Redirect to="/home/news" />
              </Switch>
            </div>
          </div>
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    3. 总结

    1.注册子路由时要写上父路由的path值
    2.路由的匹配是按照注册路由的顺序进行的
    
    • 1
    • 2
  • 相关阅读:
    技术分享 跨越语言的艺术:Flask Session 伪造
    华为od-C卷200分题目2 - 找城市
    Acrel-1200分布式光伏运维平台
    学习Source Generators之了解Source Generators的应用场景
    网站服务器是什么意思?它的用途有哪些?
    大数据必学Java基础(二):Java核心机制
    关于SRE在金融行业落地的探讨
    网课题库接口如何快速搭建到公众号
    java计算机毕业设计web网上办公自动化系统源码+mysql数据库+系统+lw文档+部署
    Zookeeper
  • 原文地址:https://blog.csdn.net/sgsgkxkx/article/details/133087689