react router零基础使用教程

目录
  • 安装
  • 配置路由
  • 添加一个新页面测试路由
  • 配置未找到的路由
  • 跳转页面
    • 通过 js
    • 通过 dom
  • 嵌套页面

安装

既然学习 react router 就免不了运行 react

安装 react

npx create-react-app my-app
cd my-app
npm start

安装 react router

npm install react-router-dom

如果一切正常,就让我们打开 index.js 文件。

配置路由

引入 react-router-dom 的 RouterProvider

import {RouterProvider} from 'react-router-dom'

设置

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <RouterProvider router={routers}></RouterProvider>
  </React.StrictMode>
);

这里的 React.StrictMode 代表以严格模式执行其包含的内容。

为了管理路由,让我们再创建一个 root.js 文件

内容如下:

文件:router.js

import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
const router =  createBrowserRouter ([
    {
        path:'/',
        element:<App />,
    }
])
export default router;

添加一个新页面测试路由

新建文件:

test.js

export default function Test(){
    return(
        <div>测试页面</div>
    )
}

在 router.js 引入

import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
const router =  createBrowserRouter ([
    {
        path:'/',
        element:<App />,
    },
    {
        path:'/test',
        element:<Test />
    }
])
export default router;

保存

在浏览器访问 http://localhost:3000/test

你应该可以看到:

配置未找到的路由

现在我们有 App.js 和 test.js 两个页面,如果访问 http://localhost:3000/hello 会出现什么呢?

这是内置的页面,提醒用户没有找到页面。

接下来使用美化或者自定义的页面:

创建文件:

error.js

export default function Error(){
    return (
        <h1>Page not found</h1>
    )
}

使用 errorElement属性 对应这个页面:

import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
import Error from '../error.js'
const router =  createBrowserRouter ([
    {
        path:'/',
        element:<App />,
        errorElement:<Error />
    },
    {
        path:'/test',
        element:<Test />
    }
])
export default router;

继续请求 http://localhost:3000/hello

我们刚才自定义的页面成功展示出来了。

跳转页面

跳转页面有很多,这里取两种方式,一是通过 dom 标签,二是通过js

通过 js

使用 useNavigate 跳转页面:

看起来就像这样:

test.js

import { useNavigate } from "react-router-dom";
function Test () {
    const navigate = useNavigate();
    function toTest2(){
        navigate("/test2",{
            state:'anny'
        });
    }
    return(
        <div onClick={toTest2}>跳转页面</div>
    )
}
export default Test

使用 useLocation 接收值:

import {useLocation} from 'react-router-dom'
export default function Test2(){
    let location = useLocation();
    return (
        <div>页面Test2 接收到的值为 {location.state}</div>
    )
}

通过 dom

通过 Link 传值跳转:

import {Link } from "react-router-dom";
function Test () {
    return(
        <div>
            <Link to="/test2" state={'anny'} >跳转页面</Link>
        </div>
    )
}
export default Test

使用 useLocation 接收值:

import {useLocation} from 'react-router-dom'
export default function Test2(){
    let location = useLocation();
    return (
        <div>页面Test2 接收到的值为 {location.state}</div>
    )
}

嵌套页面

平时写管理后台,经常会看到左右分布的布局,如果仅仅依靠 1-5 节的内容肯定很难实现,接下来看一下 根布局。

根布局使用 :

创建一个 父页面,父页面放置两个 链接:

parent.js

import { Link, Outlet } from "react-router-dom";
function Parent(){
    return(
       <div>
        <Link to={'/parent/page1'}>show page1</Link>
        <Link to={'/parent/page2'}>show page2</Link>
        <Outlet></Outlet>
       </div>
    )
}
export default Parent;

继续创建 两个页面 page1.js page2.js

page1.js

function Page1(){
    return(
        <div>i am page1</div>
    )
}
export default Page1;

page2.js

function Page2(){
    return(
        <div>i am page2</div>
    )
}
export default Page2;

修改我们的 router.js 文件:

import {createBrowserRouter} from 'react-router-dom'
import App from '../App.js'
import Test from '../test.js'
import Error from '../error.js'
import Parent from '../parent.js'
import Page1 from '../page1.js'
import Page2 from '../page2.js'
const router =  createBrowserRouter ([
    {
        path:'/',
        element:<App />,
        errorElement:<Error />,
    },
    {
        path:'/test',
        element:<Test />
    },
    {
        path:'/parent',
        element:<Parent />,
        children:[
            {
                path:'/parent/page1',
                element:<Page1 />
            },
            {
                path:'/parent/page2',
                element:<Page2 />
            }
        ]
    }
])
export default router;

到这里还差一步,就是使用重要的标签 <Outlet>

修改我们的父页面

parent.js

import { Link, Outlet } from "react-router-dom";
function Parent(){
    return(
       <div>
        <Link to={'/parent/page1'}>show page1</Link>
        <Link to={'/parent/page2'}>show page2</Link>
        <Outlet></Outlet>
       </div>
    )
}
export default Parent;

保存:

接下来访问 http://localhost:3000/parent 你将看到:

分别点击 show page1show page2 你将看到不同的效果。

如果你想将第一个子组件默认展示出来,你可以将 router.js 改成如下:

    {
        path:'/parent',
        element:<Parent />,
        children:[
            {
                path:'/parent',
                element:<Page1 />
            },
            {
                path:'/parent/page2',
                element:<Page2 />
            }
        ]
    }

再看一下效果:

到此这篇关于react router零基础使用教程的文章就介绍到这了,更多相关react router内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • react-router-dom入门使用教程(路由的模糊匹配与严格匹配)

    目录 模糊匹配 开启严格匹配 Redirect的使用 嵌套路由使用 模糊匹配 <!-- 编写路由链接 --> <NavLink to="/home/a/b">Home</NavLink> <!-- 注册路由 --> <Switch> <Route path="/home" component={Home} /> </Switch> 点击Home,进入路径/home/a/b,此时模糊匹

  • react-router-dom入门使用教程(前端路由原理)

    目录 React路由相关理解 SPA的理解 路由的理解 前端路由原理(重点) react-router-dom@5 基本路由使用 一般组件与路由组件 路由API:Switch提高路由匹配效率(单一匹配) React路由相关理解 SPA的理解 单页WEB应用(single page web application , SPA).整个应用只有一个完整的页面.点击页面的链接不会刷新页面,只会做页面的局部更新数据都需要通过ajax请求获取,并在前端异步展现. 路由的理解 1. 什么是路由? 一个路由就是

  • react-router-dom V6的配置使用实践

    目录 一.关于书写方面 二.路由的嵌套方面优化 三.关于路由的灵活配置化 四.关于路由鉴权方面 最近在搭建PC项目的React框架,涉及到React Router,开发同学有时就需要去尝试点新的东西,在开发过程中才不会枯燥的,基于这个理念推动,就在搭建的时候用V6的版本开始了(虽然只是个新版本,也不算啥新东西)...... V6的版本相对于V5,做了很多的优化,有书写方面的.路由的嵌套.路由配置化.鉴权方面等等,下面就简单的介绍下如何使用 一.关于书写方面 路由注册的时候由的Switch改为了R

  • react-router-dom v6 使用详细示例

    目录 一.基本使用 二.路由跳转 2.1 Link 组件 2.2 NavLink 组件 2.3 编程式跳转 三.动态路由参数 3.1 路径参数 路径匹配规则 兼容类组件 3.2 search 参数 四.嵌套路由 5.1 路由定义 5.2 在父组件中展示 5.3 在组件中定义 五.默认路由 六.全匹配路由 七.多组路由 八.路由重定向 九.布局路由 十.订阅和操作 history stack的原理 10.1 History对象 11.2 Location对象 state key 十一. 各类Rou

  • 浅谈React-router v6 实现登录验证流程

    目录 封装 Context 包裹容器 封装 Layout 父级容器 开发 Login 模块 开发 Protected 包裹容器 App 入口文件 此示例演示了一个包含三个页面的简单登录流程:公共页面.受保护页面和登录页面. 为了查看受保护的页面,你必须先登录.首先,访问公共页面. 然后,访问受保护的页面. 你尚未登录,因此你将被重定向到登录页面. 登录后,你将被重定向回受保护的页面. 封装 Context 包裹容器 首先封装AuthProvider组件,利用Context特性共享那些对于一个组件

  • react-router-dom6(对比 router5)快速入门指南

    目录 React Router 6 快速上手 1.概述 2.基本使用 3.重定向 4.NavLink高亮 5.useRoutes路由表 6.嵌套路由(Outlet) React Router 6 快速上手 在之前的文章中,我们已经学习了react-router-dom v5的内容,在react-router-dom v6版本中,对旧版本的API以及一些组件做了些许修改.本文开始,我将带大家学习最新的react-router-dom v6版本的路由知识,并且会与v5老版本进行一些对比. 需要学习r

  • react router零基础使用教程

    目录 安装 配置路由 添加一个新页面测试路由 配置未找到的路由 跳转页面 通过 js 通过 dom 嵌套页面 安装 既然学习 react router 就免不了运行 react 安装 react npx create-react-app my-appcd my-appnpm start 安装 react router npm install react-router-dom 如果一切正常,就让我们打开 index.js 文件. 配置路由 引入 react-router-dom 的 RouterP

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • Vue electron零基础使用教程

    需求:给vue项目加一个外壳(electron),顾名思义也就是使用electron应用程序运行vue项目,直接将写好上线的vue项目在线地址放入electron程序中即可 操作步骤: 1.构建:构建应用程序首先要先安装electron相关依赖包以及搭建框架.在这里就不详细赘述了,直接上官网看文档https://www.electronjs.org/zh/docs/latest/tutorial/quick-start 2.打包:此时就到了重要的时候,官方指定的是使用脚手架打包-----Elec

  • 零基础易语言入门教程(六)之逻辑型命令

    逻辑型命令,就是非真即假的. 具体方法和步骤如下所示: 1.如果(): 属于逻辑型,不是真就是假,这种时间我们基本在编写程序时,会有两个选择方向,见下图所示: 2.如上图,如果命令属于逻辑型数据,且有两条输出方向,当我们在如果命令里填写的为真,那么我们的系统将会显示输出真的一个,反之则为假. 3.如果()命令在我们编写程序时属于常用命令,他在运行时我们需要给他一个条件,然后才能输出内容,有了条件我们在运行时给他一个输出方向即可, 以上所述是小编给大家介绍的零基础易语言入门教程(六)之逻辑型命令的

  • 零基础易语言入门教程(五)之逻辑型数据类型

    在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型为:逻辑型,编写代码为:A=1>2,那么输出的结果应为假,因等于1是赋值与1,然后代码中写道1大于2,所以这是假的,见下图所示: 2.关系运算符: 在上图大家需注意的是,A后面的等于号是赋值符号,而后面的≥,≠,<一些符号则是关系运算符. 关系运算符不是非要设置变量给其赋值才可以使用的,同样他可以

  • 零基础易语言入门教程(四)之数据类型

    我们一起了解下易语言的数据类型,跟我们现实生活是一样的,分为文本型和数值型,即是我们所说的文科生和理科生的区别. 参考文章:详解易语言中的数据类型 方法和步骤如下所示: 1.数值型(到数值命令): 使用该命令可将文本型等一类数据更改为数值型:我们来输入一行代码看看其作用: 2.到文本()命令: 我们先输入一行代码试试,见下图 3.小结: 每一行代码前后的数据类型必须转换为同一种,方可进行相连,相加,"+"在数据为文本型时是连接作用,数值型的跟数学里的符号一样. 以上所述是小编给大家介绍

  • 零基础易语言入门教程(三)之了解控制台程序

    易语言简介: 易语言是一门以中文作为程序代码编程语言.以"易"著称.创始人为吴涛.早期版本的名字为E语言.易语言最早的版本的发布可追溯至2000年9月11日.创造易语言的初衷是进行用中文来编写程序的实践.从2000年至今,易语言已经发展到一定的规模,功能上.用户数量上都十分可观. 易语言和其它编程语言一样都有后台程序,它也不一定必须是窗口程序的了,下面小编带大家了解易语言的控制台程序. 方法和步骤如下所示: 1.延时命令: 首先学习一个第一个命令,该命令可将其脚本界面延时.1000毫秒

  • 零基础易语言入门教程(二)之编程思路

    易语言简介: 易语言是一门以中文作为程序代码编程语言.以"易"著称.创始人为吴涛.早期版本的名字为E语言.易语言最早的版本的发布可追溯至2000年9月11日.创造易语言的初衷是进行用中文来编写程序的实践.从2000年至今,易语言已经发展到一定的规模,功能上.用户数量上都十分可观. 上一篇跟大家讲了零基础易语言入门教程(一)编写第一个程序,然后接下来大家应该自己把支持库和易语言组件里面的控件全部认真的看一下,下面我直接跟大家分享下易语言简单编程思路. 方法和步骤如下所示: 1.易语言程序

  • 零基础易语言入门教程(一)

    易语言简介 易语言是一门以中文作为程序代码编程语言.以"易"著称.创始人为吴涛.早期版本的名字为E语言.易语言最早的版本的发布可追溯至2000年9月11日.创造易语言的初衷是进行用中文来编写程序的实践.从2000年至今,易语言已经发展到一定的规模,功能上.用户数量上都十分可观. 易语言是可视全中文易学易用的编程高级语言,近年来大家都积极求学,可是怎么学好它啦?小编带大家认识易语言,并使用易语言编写第一个教程. 方法和步骤如下所示: 1.下载易语言软件: 大家直接百度"易语言5

随机推荐