React-16 路由的基本使用

2023-11-05

页面中使用路由导航

react中路由使用步骤:

  1. 安装:

npm i react-router-dom

  2. 导入路由的三个核心组件:Router、Route、Link

import { BrowserRouter as Router,Link, Routes, Route } from 'react-router-dom';

  注:BrowserRouter as Router 我们实际上是使用 react-router-dom 中的 BrowserRouter ,然后为了方便使用起了个别名为 Router;

  3.使用 Router 组件包裹整个应用!

const App=()=>{
    <Router>
        <div className='App'>
            //内容页面
        </div>
    </Router>
}

ReactDOM.render(<App/>,document.getElementById('root'))

4.使用Link组件作为导航菜单(路由入口)

<Link to="/路由地址">页面1</Link>

 5.使用Routes、Route组件配置路由规则和要展示的组件(路由出口) 

import React from 'react';
import ReactDOM from 'react-dom';
// 路由
import { BrowserRouter as Router,Link, Routes, Route } from 'react-router-dom';

const First = ()=> <p>页面1的内容</p>
const Second = ()=> <p>页面2的内容</p>
class App extends React.Component{
    state={
        routers:[
            {
                title: 'First',
                path: '/',
                component: First,
            },
            {
                title: 'Second',
                path: '/second',
                component: Second,
            },
        ]
    }
    render(){
        return (
            <Router>
                <div>
                    <h3>React路由基础</h3>
                    {this.state.routers.map((item, index) => {
                        return (
                            <Link
                                key={index}
                                to={item.path}
                            >
                                {item.title}
                            </Link>
                        );
                    })}
                    <Routes>
                    {this.state.routers.map((item, index) => {
                        return (
                            <Route
                                key={index}
                                exact
                                path={item.path}
                                  element={<item.component />} 
                            />
                        );
                    })}
                    </Routes>
                </div>
            </Router>
        )
    }
}
ReactDOM.render(<App />,document.getElementById('root'))

  注:path属性要和要跳转的Link组件的路由地址相同;

         element属性表示点击路由跳转后要展示的组件;

         这是 react-router-dom V6版本语法,与V5及以上语法差异较大,使用V5版本时按以下语法:

import { BrowserRouter as Router,Link, Route } from 'react-router-dom';
   const First=()=>{
    return (<p>页面1的内容</p>)
   }

  const App=()=>{
       <Router>
           <div>
              <h3>React路由基础</h3>
              <Link to="/first">页面1</Link>
              <Route path="/first" component={First}></Route>
           </div>
        </Router>
  }

ReactDOM.render(<App/>,document.getElementById('root'))

编程式导航

通过js代码来实现页面跳转

V6:

import { useNavigate } from 'react-router-dom';
//使用时:
const navigate = useNavigate();
navigate('要跳转的页面路径')

V5:

this.props.history.push("要跳转的页面路径")

react-router-dom v6版本踩坑:

1. 在v6版本中,若想使用

const navigate = useNavigate();
navigate('要跳转的页面路径')

的方式进行路由跳转。那么使用该方法的组件必须使用函数组件而不能使用类组件!

否则会报Hooks方面的错误!

2. 在v6版本中若想使用路由嵌套,就必须按如下方式

父组件路由:

        <Routes>
          <Route path="/home/*" element={<Home/>}></Route>
        </Routes>

子组件路由:

           {/* 渲染子路由 */}
            <Routes>
                <Route path="children" element={<Children />}></Route>
            </Routes>

v5版本则是这样:

父组件路由:

          <Route path="/home" component={Home}></Route>

子组件路由:

           {/* 渲染子路由 */}
           <Route path="/home/children" component={Children}></Route>

3. 路由重定向问题:

在v6版本中,路由重定向:

import {React,useEffect} from 'react';
// 导入路由所需组件
import { BrowserRouter as Router, Routes, Route,useNavigate  } from 'react-router-dom';
// 导入创建的组件
import Home from "./pages/Home"
import CityList from "./pages/CityList"
//创建路由重定向组件
function Redirect({ to }) {
  let navigate = useNavigate();
  useEffect(() => {
    navigate(to);
  });
  return null;
}

function App() {
  return (
    <Router>
      <div className="App">
        {/* 项目根组件 */}
        {/* 配置路由 */}
        <Routes>
          {/* 路由重定向 */}
          <Route path="/" element={<Redirect to="/home" />}></Route>

          <Route path="/home/*" element={<Home/>}></Route>
          <Route path="/cityList" element={<CityList/>} exact></Route>
        </Routes>
      </div>
    </Router>
  );
}

export default App;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-16 路由的基本使用 的相关文章

随机推荐

  • 推荐一款我最近爱上的网页版文库(编辑器)——语雀yuque.com

    推荐一款由于工作接触然后热爱上的文库 语雀 语雀 https www yuque com 一开始它是阿里内部的文档库 后来随着它的功能升级 升级 升级 我恨不得把自己以前散落在各地的笔记 各种文件都搬上去 甚至最近已经弃用axureRP和s
  • 微信二次分享链接,出现config:invalid signature错误的解决方法

    当开发微信时需要做特定的页面做分享时 根据官方提供的jssdk php文件创建的签名数据包调试时 大家碰到的最多的错误而且解决最麻烦的大概就是signature错误了 分享时提示错误 errMsg config invalid signat
  • 单链表的各种操作,对于初学者来说,更容易理解

    include
  • Oracle11g 数据库提示ORA-28002: the password will expire within

    Oracle11g 数据库提示ORA 28002 the password will expire within 7 days 是说密码过期 oracle11g中默认在default概要文件中设置了 PASSWORD LIFE TIME 1
  • 批量修改mathtype中的公式字体、大小

    目录 一 保存格式文件 二 批量修改 一 保存格式文件 随便双击打开一个公式 点击菜单栏大小 定义 然后根据自己的需求修改参数 修改完成后点击确定 点击菜单栏预设 公式预设 保存到文件 选择一个保存的位置并命名 二 批量修改 下面就对全文公
  • 怎么导入别人的项目运行部署搭建Java项目springboot代码eclipse idea的心得实操

    调过无数代码 就发现没有运行不了的代码 这些代码也是我实践经验的来源 从最开始的servlet 到现在的springcloud 每一种类型的项目都有其特定的导入部署方式 如果是idea或者eclipse 按如下操作 按项目类型分两种情况部署
  • 内网穿透的应用-如何搭建WordPress博客网站,并且发布至公网上?

    文章目录 如何搭建WordPress博客网站 并且发布至公网上 概述 前置准备 1 安装数据库管理工具 1 1 安装图形图数据库管理工具 SQL Front 2 创建一个新数据库 2 1 创建数据库 2 2 为数据库创建一个用户 3 安装P
  • 如何优雅的使用fbx sdk

    include 头文件 设置lib目录 添加libfbxsdk lib 复制粘贴dll文件 运行平台一定要 大写加粗 一定要 设置为x64 添加宏FBXSDK SHARED 否则会出各种莫名其妙的问题
  • 【java基础】HashMap源码解析

    文章目录 基础说明 构造器 put方法 无扩容 无冲突 put方法 无冲突 有扩容 put方法 有冲突 无树化 put方法 有冲突 树化 remove方法 树退化 常见方法 总结 基础说明 HashMap 是一个散列表 它存储的内容是键值对
  • Go语言学习15-基本流程控制

    基本流程控制 流程控制对比 Go 和 C 基本流程控制 1 代码块和作用域 2 if 语句 3 switch语句 3 1 表达式switch语句 3 2 类型switch语句 4 for 语句 4 1 for 子句 4 2 range 子句
  • 什么是三极管的倒置状态及其作用!

    1 什么是三极管的倒置状态 集电结正偏 发射结反偏 为倒置状态 集电结正偏 发射结正偏 为饱和状态 集电结反偏 发射结反偏 为倒截止态 集电结反偏 发射结正偏 为放大状态 2 对三极管倒置状态的分析 实际上 当NPN型三极管的三个电极电位关
  • BUUCTF-Reverse:SimpleRev(算法分析题)

    题目地址 https buuoj cn challenges SimpleRev 查壳 得知消息 ELF 64 直接拖进ida64分析 int cdecl noreturn main int argc const char argv con
  • h5和APP实现交互(安卓-ios)

    h5调用APP 的方法 taskCallback是和APP端协议的函数名 安卓 window PlatformCurrency taskCallback 测试数据 ios window webkit messageHandlers task
  • 使用ffmpeg合并多个视频文件

    由于腾讯视频将一个视频分割成多个20M左右的小文件 所以必须合并起来成为一个完整视频文件 用什么工具来合并这些文件呢 想到了已经安装好的ffmpeg 开源免费 又是现成的 两种方法 方法1 直接写文件名 使用 来分割 ffmpeg i co
  • Java基础系列:NIO编程

    俗世游子 专注技术研究的程序猿 说在前面的话 聊完了Socket编程 我们来聊一聊关于NIO方面的话题 当然在这里只会介绍用的比较广泛的类 方法 其他用的不多的 就不多介绍了 用到的时候查API就好了 本节我们聊个大概内容 明白该如何使用
  • 解决qt里面添加的信号与槽不起作用的办法

    今天 在qt界面上新加了个checkbox 再加上信号与槽 发现竟然没响应 以前遇到过这个问题 没记录下来 其实很简单 把断点放在起作用的slot里面 发现它的前一步是类名 qt static metacall 而这个断点在Moc 类名 c
  • es6 嵌套数组循环_[js]从 ES3 到 ES6 教你如何数组去重

    声明 以下方法仅对数组值全部属于 primitive data type 的情况有效 ES6 方法一 Set数据结构 Array from静态方法 ES6中新增了Set数据结构 类似于数组 但是它的成员都是唯一的 其构造函数可以接受一个数组
  • Dubbo Spring Cloud

    1 概述 官方文档 https github com apache dubbo spring boot project blob master README CN md dubbo官方网站 http dubbo apache org Dub
  • 第一个Mybatis程序

    MyBatis 是一款优秀的持久层框架 它支持自定义 SQL 存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型 接口和
  • React-16 路由的基本使用

    页面中使用路由导航 react中路由使用步骤 1 安装 npm i react router dom 2 导入路由的三个核心组件 Router Route Link import BrowserRouter as Router Link R