React Router V6 的新功能

  1. <Routes>替换<Switch>
// This is a React Router v5 app

function App() {
  return (
    <BrowserRouter>
      <Switch>
        <Route exact path="/">
          <Home />
        </Route>
        <Route path="/users">
          <Users />
        </Route>
      </Switch>
    </BrowserRouter>
  );
}

function Users() {
  let match = useRouteMatch();

  return (
    <div>
      <nav>
        <Link to={`${match.url}/me`}>My Profile</Link>
      </nav>

      <Switch>
        <Route path={`${match.path}/me`}>
          <OwnUserProfile />
        </Route>
        <Route path={`${match.path}/:id`}>
          <UserProfile />
        </Route>
      </Switch>
    </div>
  );
}

// This is a React Router v6 app

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="users/*" element={<Users />} />
      </Routes>
    </BrowserRouter>
  );
}

function Users() {
  return (
    <div>
      <nav>
        <Link to="me">My Profile</Link>
      </nav>

      <Routes>
        <Route path=":id" element={<UserProfile />} />
        <Route path="me" element={<OwnUserProfile />} />
      </Routes>
    </div>
  );
}

// 将所有<Route>元素提升到单个路由配置中
import {
  BrowserRouter,
  Routes,
  Route,
  Link,
  Outlet
} from "react-router-dom";

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="users" element={<Users />}>
          <Route path="me" element={<OwnUserProfile />} />
          <Route path=":id" element={<UserProfile />} />
        </Route>
      </Routes>
    </BrowserRouter>
  );
}

function Users() {
  return (
    <div>
      <nav>
        <Link to="me">My Profile</Link>
      </nav>

      <Outlet />
    </div>
  );
}
  1. v6 中的有效路由路径:
/groups
/groups/admin
/users/:id
/users/:id/messages
/files/*
/files/:id/*

无效:
/users/:id?
/tweets/:id(\d+)
/files/*/cat.jpg
/files-*
  1. Link to
<Link to="me">
v5中
如果当前 URL/users ,<a href="/me">
当前 URL 有一个尾部斜杠,比如/users/<a href="/users/me">
v6 修复了这种歧义
始终为<a href="/users/me">
  1. useNavigate代替 useHistory
// This is a React Router v5 app
import { useHistory } from "react-router-dom";

function App() {
  let history = useHistory();
  function handleClick() {
    history.push("/home");
  }
  return (
    <div>
      <button onClick={handleClick}>go home</button>
    </div>
  );
}
// This is a React Router v6 app
// 1.跳转指定页面 
import { useNavigate } from "react-router-dom";
let navigate = useNavigate();
  function handleClick() {
    navigate("/home");
  }
//如果您需要替换当前位置而不是将新的一个新的位置替换到历史堆栈中,使用
navigate(to, { replace: true })
//传状态
navigate(to, { state })
// 2. 回跳
const { go, goBack, goForward } = useHistory();
const navigate = useNavigate();
Go 2 pages back/forward: go(-2) / navigate(-2)| go(2) / navigate(2)
Go back: goBack() / navigate(-1)
Go forward: goForward() / navigate(1)
  1. Navigate
import { Routes, Route, Navigate } from "react-router-dom";

function App() {
  return (
    <Routes>
      <Route path="/home" element={<Home />} />
      <Route path="/" element={<Navigate replace to="/home" />} />
    </Routes>
  );
}
// 声明式API
import { Navigate } from "react-router-dom";

function App() {
  return <Navigate to="/home" replace state={state} />;
}
  1. <NavLink exact> 重命名为 <NavLink end>
  2. 移除了 <NavLink />activeClassNameactiveStyle属性
If you prefer to keep the v5 props, you can create your own <NavLink /> as a wrapper component for a smoother upgrade path.
import * as React from "react";
import { NavLink as BaseNavLink } from "react-router-dom";

const NavLink = React.forwardRef(
  ({ activeClassName, activeStyle, ...props }, ref) => {
    return (
      <BaseNavLink
        ref={ref}
        {...props}
        className={({ isActive }) =>
          [
            props.className,
            isActive ? activeClassName : null
          ]
            .filter(Boolean)
            .join(" ")
        }
        style={({ isActive }) => ({
          ...props.style,
          ...(isActive ? activeStyle : null)
        })}
      />
    );
  }
);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值