学习react-router-v6 : useSearchParams、Outlet、Navigate

news/2024/11/26 23:47:35/

学习react-router-v6

useSearchParams

类型:hook
用于对search做一些处理。
const [searchParams, setSearchParams] = useSearchParams();
比如访问路径/index?nav=123,const nav = searchParams.get("nav"); // 这个对象的用法大部分都需要通过原型链上的api。可以获取search参数。
当然也可以用setSearchParams修改search,触发组件rerender
下面的一个示例,就是通过获取参数来做路由重定向。

import React from "react";
import { Navigate } from "react-router";
import { useSearchParams } from "react-router-dom";function NavigateComp() {const [searchParams, setSearchParams] = useSearchParams();console.log("searchParams", searchParams);const nav = searchParams.get("nav"); // 这个对象的用法大部分都需要通过原型链上的api。console.log("nav", nav);if (!nav) {return (<divonClick={() => {setSearchParams({nav: "/demo",}); // 修改 search 会触发组件rerender}}>404</div>);} else {// Navigate 组件有点类似以前的Redirect组件,可以说是useNavigate的组件表现。return <Navigate to={nav} replace />;}
}export default NavigateComp;

Outlet

如果你用过vue-routerrouter-view组件你大概就知道这是什么东西了。
这个是一个组件,你可以将路由配置在外面写好,然后这个组件就可以放在某个地方进行路由匹配,匹配到的嵌套路由就会渲染在这个组件所在的地方。
比如路由配置。

 path: "/learn",element: <Learn />,children: [{path: "outlet",element: <OutletComp />,},
]

组件

import classNames from "classnames";
import React from "react";
import { Outlet, useNavigate } from "react-router";function Learn() {const navigate = useNavigate();return (<div><div className={classNames("box")}><divclassName={classNames("button")}onClick={() => {navigate("/learn/outlet");}}>navigate outlet</div></div>Learn<Outlet />{/* 作用上可以类比vueRouter的router-view组件 */}</div>);
}export default Learn;

useOutletContext

类型:hook
与上面的组件搭配,用于提供上下文。
父组件

function Demo() {const navigate = useNavigate();const providerData = {a: 1,}; // 提供上下文return (<><div>Demo</div><divclassName="button"onClick={() => {navigate("/demo/about");}}>about</div><Outlet context={providerData} /></>);
}

子组件

import React from "react";
import { useOutletContext} from "react-router";function Children() {const { a } = useOutletContext<{a: number;}>(); // 拿到局部上下文的数据return (<><div>动态路由的参数 {params.tab || "useParams"}</div><div>context {a}</div></>);
}export default Children;

Navigate

这是一个组件。
可以认为是useNavigate的组件用法。
可以做重定向,v6版本不再提供Redirect组件。

import React from "react";
import { Navigate } from "react-router";function NavigateComp() {// Navigate 组件有点类似以前的Redirect组件,可以说是useNavigate的组件表现。return <Navigate to={nav} replace />;
}export default NavigateComp;

useNavigate

这个hook不算新的,很常用,用于编程式跳转路由。

function Demo() {const navigate = useNavigate();return (<divclassName="button"onClick={() => {navigate("/demo/about");}}>about</div>);
}

学习会让你变得更加自信。


http://www.ppmy.cn/news/123982.html

相关文章

罗技无线键鼠卡顿

我的电脑右键→属性→设备管理器→通用串行总线控制器→右键&#xff08;usb根集线器&#xff09;→属性→电源管理→去掉勾&#xff08;允许计算机关闭此设备以节约电源&#xff09;

罗技(Logitech)M325鼠标拆解

拆卸电池盖&#xff0c;取下电池&#xff0c;撕开电池贴纸正极&#xff08;&#xff09;&#xff0c;即可看见螺丝。 然后&#xff0c;从后方开始分解上下壳。

【罗技】M590 鼠标驱动

发现自己的m590 使用起来挺飘忽的产品说明 M590 下载页 Download 固件更新 一直搜不到鼠标。 快捷键 设置了不管用&#xff1f;

罗技G300s(好物分享)

好物分享-鼠标 推荐一款经济好用功能齐全的鼠标——罗技G300s 价格&#xff1a;日常价格89-109&#xff1b;618/双十一价格在60 左右 个人不打游戏&#xff0c;主要应用场景为日常办公敲代码&#xff1b;这款鼠标19年买的&#xff0c;当时入手价59&#xff0c;使用了三年了依…

【罗技】m720

使用指南 https://support.logi.com/hc/zh-cn/articles/360024154994PDF 地址 第三个按钮才是三切换 配对 先选通道然后长按

罗技蓝牙鼠标连接电脑教程

罗技蓝牙鼠标是一款轻巧的无线鼠标&#xff0c;很多用户都在使用罗技鼠标&#xff0c;那罗技蓝牙鼠标要怎么连接电脑呢&#xff1f;下面小编就给大家分享一下罗技蓝牙鼠标连接电脑的教程。 操作方法&#xff1a; 打开鼠标盖子&#xff0c;将接收器插在电脑上后&#xff0c;开启…

罗技M590优联和蓝牙连接的问题

1、优联默认使用频道1连接&#xff0c;也可以设置为蓝牙连接&#xff0c;这样频道1的优联通道就失效了&#xff1b; 2、如果频道1曾经设置了蓝牙连接&#xff0c;再使用优联连接时会无法配对的&#xff0c;解决方案(官方的)&#xff1a; a、下载并安装优联驱动软件&…

罗技 Logitech flow 连接

1. 确定两台电脑在同一网段下&#xff0c;可以互相ping 通 2. 官网下载安装最新版本 下载 Logitech Options 自定义软件 注意&#xff1a; 不要使用windows 提示安装的Logitech 一定要在官网下载。否则版本不对会提示 “请启用其他计算机上的Logitech Flow”的问题