阅读 359

react-router-dom @6版本API变动

前言

最近发现react-router-dom已经有6版本了,于是决定体验一把。

安装

  npm i react-router-dom 复制代码

我的默认是6.0.2版本

image.png

使用时候发现Switch引入Ts报错

image.png

变动

1.Switch替换成了Routes;
2.Route去除exact;
3.Route中统一使用element属性,去掉原来的component和render;
4.useNavigate取代useHistory;

总的来说: 更加语义化、使用更为简洁。

使用

App.tsx

import { BrowserRouter, Route, Routes } from "react-router-dom"; import { Home } from "./page/home"; import { Login } from "./page/login"; import { Page1 } from "./page/page1"; function App() {   return (     <div className="App">       <BrowserRouter>         <h1>router6</h1>         <Routes>           <Route path={"/"} element={<Home />}></Route>           <Route path={"/login"} element={<Login />}></Route>           <Route path={"/page1/*"} element={<Page1 />}></Route>           <Route path={"/404"} element={<div>404</div>}></Route>         </Routes>       </BrowserRouter>     </div>   ); } export default App; 复制代码

home.tsx

import { Link } from "react-router-dom"; export const Home = () => {   return (     <>       <h2>Where to, buddy?</h2>       <ul>         <li>           <Link to={"/login"}>login</Link>         </li>         <li>           <Link to={"/page1"}>page1</Link>         </li>       </ul>     </>   ); }; 复制代码

login.tsx(含useNavigate的使用)

import { useNavigate } from "react-router-dom"; export const Login = () => {   const nav = useNavigate();   const goHome = () => {     nav("/");   };   return (     <>       <button onClick={goHome}>go Home</button>       <br />       login     </>   ); }; 复制代码

注意:useNavigate()不可以放到goHome函数里面会报错

 const goHome = () => {     const nav = useNavigate();     nav("/");   }; 复制代码

image.png

page1.tsx(嵌套使用)

import { Route, Routes } from "react-router-dom"; export const Page1 = () => {   return (     <>       <h3>page1</h3>       <Routes>         <Route path={"page1-1"} element={<>page1-1</>}></Route>         <Route path={"page1-2"} element={<>page1-2</>}></Route>       </Routes>     </>   ); }; 复制代码

以上就是一些变更的使用方法,同时新API:Outlet,但没搞懂有啥用。


作者:逆风起飞
链接:https://juejin.cn/post/7029615069679845384


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐