React - Switch、路由精准匹配与模糊匹配、Redirect

一、Switch

1、基本介绍
  • Switch 用于只渲染第一个匹配到的路由,匹配到后就停止,不再继续往下找
2、基本使用
(1)pages
  1. About 组件
js 复制代码
import React, { Component } from "react";

export default class About extends Component {
    render() {
        return <h3>About Content</h3>;
    }
}
  1. Home 组件
js 复制代码
import React, { Component } from "react";

export default class Home extends Component {
    render() {
        return <h3>Home Content</h3>;
    }
}
  1. Test 组件
js 复制代码
import React, { Component } from "react";

export default class Test extends Component {
    render() {
        return <h3>Test Content</h3>;
    }
}
(2)components
  • MyNavLink 组件
js 复制代码
import React, { Component } from "react";
import { NavLink } from "react-router-dom";
import "./index.css";

export default class MyNavLink extends Component {
    render() {
        return <NavLink activeClassName="selected" className="list-group-item" {...this.props} />;
    }
}
css 复制代码
.selected {
    color: blue;
    font-weight: bold;
    background-color: #f0f0f0;
}
(3)main
  1. App 组件
js 复制代码
import React, { Component } from "react";
import { Route, Switch } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import Test from "./pages/Test";
import MyNavLink from "./components/MyNavLink/index";

export default class App extends Component {
    render() {
        return (
            <div>
                <h2>React Router Demo</h2>
                <div>
                    <MyNavLink to="/about">About</MyNavLink>
                    <MyNavLink to="/home">Home</MyNavLink>
                </div>
                <div>
                    <Switch>
                        <Route path="/about" component={About} />
                        <Route path="/home" component={Home} />
                        <Route path="/home" component={Test} />
                    </Switch>
                </div>
            </div>
        );
    }
}
  1. index.jsx
js 复制代码
import React from "react"; // 引入 React 核心库
import ReactDOM from "react-dom"; // 引入 ReactDOM
import App from "./App"; // 引入 App 组件
import { BrowserRouter } from "react-router-dom";

// 渲染 App 组件到页面
ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>,
    document.getElementById("root"),
);

二、路由精准匹配与模糊匹配

1、基本介绍
  1. Route 默认是模糊匹配
  2. Route 的 exact 用于控制路由的匹配规则,确保只有当 URL 完全匹配时才渲染组件
2、基本使用
(1)pages
  1. About 组件
js 复制代码
import React, { Component } from "react";

export default class About extends Component {
    render() {
        return <h3>About Content</h3>;
    }
}
  1. Home 组件
js 复制代码
import React, { Component } from "react";

export default class Home extends Component {
    render() {
        return <h3>Home Content</h3>;
    }
}
(2)components
  • MyNavLink 组件
js 复制代码
import React, { Component } from "react";
import { NavLink } from "react-router-dom";
import "./index.css";

export default class MyNavLink extends Component {
    render() {
        return <NavLink activeClassName="selected" className="list-group-item" {...this.props} />;
    }
}
css 复制代码
.selected {
    color: blue;
    font-weight: bold;
    background-color: #f0f0f0;
}
(3)main
  1. App 组件
js 复制代码
import React, { Component } from "react";
import { Route } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import MyNavLink from "./components/MyNavLink/index";

export default class App extends Component {
    render() {
        return (
            <div>
                <h2>React Router Demo</h2>
                <div>
                    <MyNavLink to="/about">About</MyNavLink>
                    <MyNavLink to="/home/a/b">Home</MyNavLink>
                </div>
                <div>
                    <Route exact path="/about" component={About} />
                    <Route exact path="/home" component={Home} />
                </div>
            </div>
        );
    }
}
  1. index.jsx
js 复制代码
import React from "react"; // 引入 React 核心库
import ReactDOM from "react-dom"; // 引入 ReactDOM
import App from "./App"; // 引入 App 组件
import { BrowserRouter } from "react-router-dom";

// 渲染 App 组件到页面
ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>,
    document.getElementById("root"),
);

三、Redirect

1、基本介绍
  • Redirect 用于自动将用户从一个路由导航到另一个路由
2、基本使用
(1)pages
  1. About 组件
js 复制代码
import React, { Component } from "react";

export default class About extends Component {
    render() {
        return <h3>About Content</h3>;
    }
}
  1. Home 组件
js 复制代码
import React, { Component } from "react";

export default class Home extends Component {
    render() {
        return <h3>Home Content</h3>;
    }
}
(2)components
  • MyNavLink 组件
js 复制代码
import React, { Component } from "react";
import { NavLink } from "react-router-dom";
import "./index.css";

export default class MyNavLink extends Component {
    render() {
        return <NavLink activeClassName="selected" className="list-group-item" {...this.props} />;
    }
}
css 复制代码
.selected {
    color: blue;
    font-weight: bold;
    background-color: #f0f0f0;
}
(3)main
  1. App 组件
js 复制代码
import React, { Component } from "react";
import { Route, Redirect, Switch } from "react-router-dom";
import Home from "./pages/Home";
import About from "./pages/About";
import MyNavLink from "./components/MyNavLink/index";

export default class App extends Component {
    render() {
        return (
            <div>
                <h2>React Router Demo</h2>
                <div>
                    <MyNavLink to="/about">About</MyNavLink>
                    <MyNavLink to="/home">Home</MyNavLink>
                </div>
                <div>
                    <Switch>
                        <Route path="/about" component={About} />
                        <Route path="/home" component={Home} />
                        <Redirect to="/about" />
                    </Switch>
                </div>
            </div>
        );
    }
}
  1. index.jsx
js 复制代码
import React from "react"; // 引入 React 核心库
import ReactDOM from "react-dom"; // 引入 ReactDOM
import App from "./App"; // 引入 App 组件
import { BrowserRouter } from "react-router-dom";

// 渲染 App 组件到页面
ReactDOM.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>,
    document.getElementById("root"),
);
(4)路由规则
路由 说明
/about 匹配第一个 Route,渲染 About 组件
/home 匹配第二个 Route,渲染 Home 组件
/other(不存在的路径) 前两个 Route 都不匹配,匹配 Redirect,重定向到 /about
相关推荐
编程阿峰4 分钟前
Python 环境配置(二)安装jupyter、matplotlib、numpy库
开发语言·python·jupyter·numpy·matplotlib
AC赳赳老秦5 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子13 分钟前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
磁爆步兵26 分钟前
内存分区:程序运行的核心秘密
java·开发语言·jvm
水瓶夜之35 分钟前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
此生决int41 分钟前
深入理解C++系列(06)——模版初阶与STL
开发语言·c++
笨笨狗吞噬者1 小时前
VS Code 内置浏览器打开网页
前端
SamChan901 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
swany1 小时前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy
小杍随笔1 小时前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust