react router零基础使用教程

2022-10-14,,

React-Router 路由库,是官方维护的路由库,事实上也是唯一可选的路由库。它通过管理 URL,实现组件的切换和状态的变化,开发复杂的应用几乎肯定会用到

目录
  • 安装
  • 配置路由
  • 添加一个新页面测试路由
  • 配置未找到的路由
  • 跳转页面
    • 通过 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内容请搜索北冥有鱼以前的文章或继续浏览下面的相关文章希望大家以后多多支持北冥有鱼!

    您可能感兴趣的文章:

    • react-router-dom v6 使用详细示例
    • react-router-dom入门使用教程(路由的模糊匹配与严格匹配)
    • react-router-dom入门使用教程(前端路由原理)
    • react-router-dom6(对比 router5)快速入门指南
    • 浅谈React-router v6 实现登录验证流程
    • react-router-dom V6的配置使用实践

    《react router零基础使用教程.doc》

    下载本文的Word格式文档,以方便收藏与打印。