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
相关推荐
爱勇宝27 分钟前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen1 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518133 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode3 小时前
Redis 在生产项目的使用
前端·后端
LiaCode3 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战3 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
风骏时光牛马4 小时前
# Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例
前端
米丘4 小时前
微前端之 Web Components 完全指南
微服务·html
weedsfly4 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
xiaodaoluanzha4 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端