当前位置 : 主页 > 网络编程 > JavaScript >

react router零基础使用教程

来源:互联网 收集:自由互联 发布时间:2023-02-08
目录 安装 配置路由 添加一个新页面测试路由 配置未找到的路由 跳转页面 通过 js 通过 dom 嵌套页面 安装 既然学习 react router 就免不了运行 react 安装 react npx create-react-app my-app cd my-ap
目录
  • 安装
  • 配置路由
  • 添加一个新页面测试路由
  • 配置未找到的路由
  • 跳转页面
    • 通过 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内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

    网友评论