如何使用useNavigate()进行路由跳转及传参

  1. 如何使用useNavigate()跳转路由,并进行参数传递
  • 携带的参数分为三种:search、params、state

import { useNavigate } from "react-router-dom";
function useNavigateJumpToPage() {
  const userIsInactive = useFakeInactiveUser();
  const navigate = useNavigate();
  // search
  navigate('/page1?name=jack&age=18');
  // params
  navigate('/page2/jack');
  // state
  navigate('/page3', { state: { data: 'test' } });
}
  1. 在其他组件中接收参数
import { useLocation,useParams,useSearchParams  } from 'react-router-dom';

function App() {

// 获取navigate中传递的search数据
let [searchParams, setSearchParams] = useSearchParams()
console.log(searchParams.get('name')) //  "jack"

// 获取navigate中传递的params数据
let params = useParams(); // params {"name": "jack"}


// 获取navigate中传递的state中的信息
  let location = useLocation(); 
//{
//   "pathname": "/page3",
//    "search": "",
//    "hash": "",
//    "state": {
//        "data": "test"
//    },
//    "key": "ximjwhyi"
//}

}
 //search数据,对应路由设置
<Route path="/page1" element={<Page1 />}></Route>

 // params数据,对应路由设置
<Route path="/page2/:name" element={<Page2 />}></Route>

 // params数据,对应路由设置
<Route path="/page3" element={<Page3 />}></Route>
  1. 封装高阶组件,使hooks可以在class类组件中调用
  • 封装高阶组件

import { useNavigate, useLocation, useParams, useSearchParams } from 'react-router-dom'

// Router6 之后,代码类的API都迁移到了hooks上,但不能再类组件中调用
// 封装高阶组件,使hooks可以在class类组件中调用
const withRouter = function (WrapperComponent) {
    return function (props) {
        // 在函数组件中通过hook拿到navigate对象
        const uNavigate = useNavigate()
        // 获取navigate中state传的参数
        const uLocation = useLocation()

        const uParams = useParams();
        const uSearchParams = useSearchParams();
        // 将获取到的navigate放到一个对象中
        const router = { uNavigate, uLocation, uParams, uSearchParams }

        return <WrapperComponent {...props} router={router} />
    }
}
export {
    withRouter
}

调用

// 引入自定义高阶组件,使hooks:useNavigate可以在class中运用
import { withRouter } from '...'
class Page extends Component {
    constructor(props) {
        super(props);
    }
    componentDidMount() {
        const { uNavigate,uLocation } = this.props.router;
        console.log(uLocation)

        uNavigate('/pagexx')
    }
    render() {
        return (<div>
            page
        </div>)
    }
}

export default withRouter(Page);
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值