由于 useNavigate、useLocation、useSearchParams等方法,只能写在函数内,也就是说我们可以在React Hooks 函数组件内可以直接 import 导入,创建实例化对象后我们就可以直接使用(必须在组件的最顶层使用,不能写在函数方法或jsx内),但是对于React class类组件,显然我们是无法直接使用这些组件方法的,因此我们需要封装一个高阶组件。
一个高阶组件就是一个函数,这个函数接受一个组件作为输入,然后返回一个新的组件作为结果而且,返回的新组件拥有了输入组件所不具有的功能
高阶组件:高阶组件必须是一个函数, withRouter 保证是一个函数,该函数接收一个组件作为参数,withRouter 函数被调用时将组件传进去,返回一个新的组件
import { useNavigate, useLocation, useSearchParams,useParams } from "react-router-dom";
function withRouter(Com) {
return function (props) {
const navigate = useNavigate();
const location = useLocation();
// searchParams 是一个对象,可以用来获取 url 中的查询参数
// setSearchParams 是一个方法,可以用来设置 url 中的查询参数
const [searchParams, setSearchParams] = useSearchParams();
const params = useParams();
return (
/*