react-router-dom v6 版本使用内容详解

32 篇文章 0 订阅

react-router-dom v6 版本使用内容详解

  • 1.路由组件

     (1-1) v6 方式一 react-router-dom 常规
     (1-2) v6 方式二 react-router-dom 使用 useRoutes
    
  • 2.页面跳转

     (2-1) Link 组件跳转
     (2-2) useNavigate hooks跳转,代替useHistory
    
  • 3.获取路由的参数

     (3-1) useParams 获取动态路由的值
     (3-2) useSearchParams 获取查询字符串的值
     (3-3) useLocation 获取上一个页面传递进来的 state 参数 v5、v6一样
    

介绍:

v6 较 v5版本,在常用的路由组件管理、页面跳转、页面跳转带参等功能使用,需要注意。

官网:https://reactrouter.com/docs/en/v6

安装:

//自己选一个,几种方式都可以
npm方式:
	npm install --save react-router-dom

cnpm方式:
	cnpm install --save react-router-dom

yarn方式:
	yarn add react-router-dom
	
指定版本:使用@
	yarn add react-router-dom@5.2.1

见:package.json文件内dependencies新增了react-router-dom的版本号,即安装成功
重启下项目(不需要install)

1.路由组件

BrowserRouter:引用不变
Routes:替换 v5 的 Switch 组件
Route:引用不变。参数 element 替换 v5 的 component、render 组件

(1-1) 创建 src/routers/index.js

import Home from '../views/Home';
import About from '../views/About'
import Err404 from '../views/Err404'
const routers = [
  {
    title: '首页',
    path: '/',
    component: Home,
  },
  {
    title: '关于',
    path: '/inbox',
    component: About,
  },
  {
  	title: '404',
    path: '/inbox',
    component: Err404,
  }
];

export default routers;

(1-2) 调用

v6 方式一 react-router-dom 常规(推荐 - 可以设置title更方便)

// v6 方式一
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import routers from './routers';

const App = () => {
  return (
    <Router>
      <Routes> // 不是老版本的:Switch
        {routers.map((item, index) => {
          return (
            <Route
              key={index}
              exact
              path={item.path}
              element={<item.component />} // 不是老版本的:component 或 render
              // onEnter、onBeforeMount、onMounted事件,会在组件初始化时执行一次,切换路由不执行
              // 若 修改 document.title 查看文档:https://blog.csdn.net/weixin_44461275/article/details/122843160
            />
          );
        })}
      </Routes>
    </Router>
  );
};

export default App;


//v5
import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import routers from './routers';

const App = () => {
  return (
    <Router>
      <Switch>
        {routers.map((item, index) => {
          return (
            <Route
              key={index}
              exact
              path={item.path}
              render={() => { // 推荐使用 render 不用 component
              	document.title = item.title;
                return <item.component />;
              }}
              //或:
              //component={<item.component />}
            />
          );
        })}
      </Switch>
    </Router>
  );
};

export default App;

v6 方式二 react-router-dom + 使用 useRoutes

//路由json组件
import Layout from '../layout'
import About from '../views/About'
import Home from '../views/Home'
import AboutIndex from '../views/About/Component/AboutIndex'
import AboutList from '../views/About/Component/AboutList'
import Error404 from '../views/Error404'

const routes = [
    {
        path: "/",
        element: <Layout />, 
        children: [
            {
                index : true,
                element: <Home />
            },
            {
                path: "/about",
                element: <About />,
                children: [
                    { index : true, element: <AboutIndex />},
                    { path : "/about/:id", element :<AboutList />}
                ]
            },
        ]
    },
    {
       path: "*",
       element: <Error404 />,
    }
]

export default routes

//app.js
import React from 'react';
import { BrowserRouter as Router, useRoutes } from 'react-router-dom';
import routers from '../routers';

function App() {
  const GetRoutes = () => useRoutes(routers); //一定要是函数内
  
  return (
    <Router>
      <GetRoutes />
    </Router>
  );
}

export default App;

2.页面跳转

(2-1) Link 组件跳转

import React from "react";
import { Link } from "react-router-dom";

function DEMO() {
  return (
    <Link to="/aaa">点击跳转页面</Link>
  );
}

export default DEMO;

(2-2) useNavigate hooks跳转,代替useHistory

import React from "react";
import { useNavigate } from "react-router-dom";

function DEMO() {
    const navigate = useNavigate();

    // 点击跳转页面
    function hrefAaa() {
        navigate('/aaa')
    }

    // history replace模式
    function hrefReplace() {
        navigate("/aaa", { replace: true });
    }

    // history.go(-1)
    function historyBack() {
        navigate(-1);
    }
    
	// 跳转带参数
	function hrefState() {
      navigate("/test", {
        state: { test: 111 },
      });
    }
    
    return (
        <>
            <div onClick={hrefAaa}>点击跳转页面</div>
            <div onClick={hrefReplace}>history replace模式</div>
            <div onClick={historyBack}>返回上一个页面</div>
        </>
    );
}

export default DEMO;

3.获取路由的参数

  • useParams 获取动态路由的值

  • useSearchParams 获取查询字符串的值

  • useLocation 获取上一个页面传递进来的 state 参数 v5、v6一样

    import React,{ useEffect } from “react”;
    import { useParams, useSearchParams, useLocation } from “react-router-dom”;

    export default function GoodsDetail() {
    const params = useParams(); // 获取动态路由的值
    const [searchParams, setSearchParams] = useSearchParams(); // 获取查询字符串的值
    const location = useLocation(); // 获取上一个页面传递进来的 state 参数

    useEffect(() => {
    // 一个对象,key 为动态字符串的 key
    console.log(params); // {id: ‘123’}

    console.log(location.state); // { test: 111 }  上一个页面带参获取 非url上面的search
    
    // 输入 http://localhost:3000/goods/123?name=1111
    console.log(searchParams.get("name")); // 111
    

    }, []);

    const handleSetSearch = () => {
    // 新增-修改
    setSearchParams({
    keyName: 2222
    }); // /aaa?keyName=2222
    };

    return (

    Page

    );
    }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Router DOM v6 是一个用于 React 应用程序的路由库。它提供了一种在应用程序中进行页面导航和管理的方式。 下面是一个简单的使用教程来帮助你开始使用 React Router DOM v6: 1. 安装 React Router DOM v6: ```shell npm install react-router-dom@next ``` 注意:v6 目前仍然是预发布版本,所以需要添加 `@next` 后缀来安装最新版本。 2. 在你的应用程序的入口文件(通常是 `index.js`)中导入所需的组件: ```jsx import { BrowserRouter as Router, Route, Link } from 'react-router-dom'; ``` 3. 使用 `Router` 组件将你的应用程序包裹起来,并定义你的路由规则: ```jsx ReactDOM.render( <Router> <Route path="/" component={App} /> </Router>, document.getElementById('root') ); ``` 这个例子中,所有匹配 `/` 路径的组件都将渲染 `App` 组件。 4. 在你的应用程序的其他组件中使用 `Link` 组件来创建导航链接: ```jsx import { Link } from 'react-router-dom'; function Navigation() { return ( <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/contact">Contact</Link> </li> </ul> </nav> ); } ``` 这个例子中,点击链接将会导航到对应的路径。 5. 在你的应用程序的其他组件中使用 `Route` 组件来定义不同路径下的组件渲染: ```jsx import { Route } from 'react-router-dom'; function App() { return ( <div> <h1>My App</h1> <Route exact path="/" component={HomePage} /> <Route path="/about" component={AboutPage} /> <Route path="/contact" component={ContactPage} /> </div> ); } ``` 这个例子中,`HomePage` 组件将会在 `/` 路径下渲染,`AboutPage` 组件将会在 `/about` 路径下渲染,`ContactPage` 组件将会在 `/contact` 路径下渲染。 这只是 React Router DOM v6 的一些基本用法,还有很多其他功能和概念可以学习。你可以查阅官方文档以获取更多详细的信息和示例代码:https://reactrouter.com/docs/en/v6

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值