如何使用useNavigate 进行路由的跳转以及传参,并且获取参数。


前言

本文章主要是讲述如何通过useNavigate携带参数并在对应组件进行接收。


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何携带search,params,state参数

import React, { memo } from 'react'
import { useNavigate } from 'react-router-dom'
const Home = memo(() => {
  const navigate=useNavigate()
 const  goDetail = () => {
    navigate('/Detail?name=tom&age=18')
  }
  const goAbout = () => {
    navigate('/About/jack')
  }
  const goshop = () => {
    navigate('/Detail/Shop', { state: {name:'tom',age:"20"} })
  }
  return (
    <div>
      <button onClick={goDetail}>点我去Detail页面并且传递search参数</button>
      <button onClick={goAbout}>点我去About页面并且传递params参数</button>
      <button onClick={goshop}>点我去shop页面并且传递state参数</button>
    </div>
  )
})

export default Home

二、写对应的路由规则

import { useRoutes,Navigate } from "react-router-dom";
import Home from "../pages/Home";
import Detail from "../pages/Detail";
import About from "../pages/About";
import Shop from "../pages/Shop";

import React, { memo } from 'react'
const DefineRoutes = memo(() => {
const routes= useRoutes(
    [
      {
        path: '/Home',
        element:<Home></Home>
      },
      {
        path: '/Detail',
        element: <Detail></Detail>,
        children: [
          {
            path: 'Shop',
            element:<Shop></Shop>
          }
        ]
      },
      {
        path: '/About/:name',
        element:<About></About>
      },
      {
        path: '/',
        element:<Navigate to='/Home'></Navigate>
    }
    ]
  )
  return routes
})

export default DefineRoutes 

三,在App导入应用

import React, { memo } from 'react'
import DefineRoutes from './router'
const App = memo(() => {
  return (
    <div>
      <DefineRoutes></DefineRoutes>
    </div>
  )
})

export default App

一定一定要在App组件外面包裹一层router,比如BrowerRouter

四,在不同的组件中获取不同的参数

获取Params参数使用useParams

import React, { memo } from 'react'
import { useParams } from 'react-router-dom'

const About = memo(() => {
  console.log(useParams())
  return (
    <div>About</div>
  )
})

export default About

获取search参数使用useSearchParams

import React, { memo } from 'react'
import {Outlet, useSearchParams } from 'react-router-dom'


const Detail = memo(() => {
 const [search,setsearch] = useSearchParams()
  console.log(search.get('name'))
  console.log(search.get('age'))
  return (
    <div>Detail
      <h1>我是Detail的子组件</h1>
      <Outlet></Outlet>
    </div>
  )
})

export default Detail

使用useLocation获取search参数

import React, { memo } from 'react'
import { useLocation } from 'react-router-dom'

const Shop = memo(() => {
  const state = useLocation()
  console.log(state)
  return (
    <div>Shop</div>
  )
})

export default Shop

总结

不同的路由传参一定要注意,是否要在注册路由的时候接收,一定要使用对应的hook接收对应的参数。

好的,使用`setup`语法糖的具体实现方式如下: 首先,在`router/index.js`中添加路由配置,设置`VCom2`组件的路由路径为`/vcom2/:id`,其中`:id`表示路由参数: ```js import { createRouter, createWebHistory } from 'vue-router'; import VCom1 from '../views/VCom1.vue'; import VCom2 from '../views/VCom2.vue'; const routes = [ { path: '/', name: 'VCom1', component: VCom1 }, { path: '/vcom2/:id', name: 'VCom2', component: VCom2 } ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes }); export default router; ``` 接下来,在`VCom1`组件中定义一个点击事件,当点击按钮时,使用`$router.push()`方法跳转到`VCom2`组件,并通过`params`属性传递参数: ```html <template> <div> <button @click="goToVCom2">跳转到VCom2</button> </div> </template> <script> import { useRouter } from 'vue-router'; export default { setup() { const router = useRouter(); const goToVCom2 = () => { const id = 123; // 传递的参数 router.push({ name: 'VCom2', params: { id } }); } return { goToVCom2 } } } </script> ``` 注意,这里使用了`useRouter()`函数获取了`router`实例,然后使用`push()`方法跳转到`VCom2`组件,同时通过`params`属性传递了参数`id`。 最后,在`VCom2`组件中使用`route`属性获取路由参数,然后就可以在视图模板中显示参数了: ```html <template> <div> <h2>这是VCom2组件</h2> <p>路由参数:{{ id }}</p> </div> </template> <script> import { computed } from 'vue'; import { useRoute } from 'vue-router'; export default { setup() { const route = useRoute(); const id = computed(() => route.params.id); return { id } } } </script> ``` 注意,这里使用了`useRoute()`函数获取了当前路由实例,然后通过计算属性`id`获取路由参数`id`并返回。最终在视图模板中使用插值表达式`{{ id }}`显示参数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值