react router教程

react router教程

1:安装

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

安装 react

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

安装 react router

npm install react-router-dom

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

2:配置路由

引入 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;

3:添加一个新页面测试路由

新建文件:

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

你应该可以看到:

在这里插入图片描述

4:配置未找到的路由

现在我们有 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

在这里插入图片描述
我们刚才自定义的页面成功展示出来了。

5:跳转页面

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

5.1:通过 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>
    )
}
5.2:通过 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>
    )
}

6:嵌套页面

平时写管理后台,经常会看到左右分布的布局,如果仅仅依靠 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 />
            }
        ]
    }

再看一下效果:

在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一拖再拖 一拖再拖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值