React 学习——路由跳转(Link、useNavigate)、跳转时传递参数(问号传递、path中冒号拼接)

需要四个页面:项目入口index.js文件,router配置路由跳转文件,article组件页面,login组件页面

1、项目入口index.js文件

注意:要安装这个依赖  react-router-dom

import React from 'react'
import { createRoot } from 'react-dom/client'
import { RouterProvider } from 'react-router-dom'
import router from './router'


const root = createRoot(document.getElementById('root'))
root.render(
    <RouterProvider router={router} />
)

2、router配置路由跳转文件

import React from "react";
import { createBrowserRouter } from "react-router-dom";
import Article from "../views/article";
import Login from "../views/login";

const router = createBrowserRouter([
  {
    // path: '/login',
    path: '/login/:id/:name',//第二种传参需要修改的
    element: <Login />
  },
  {
    path: '/article',
    element: <Article />
  }
])
export default router

3、article组件页面

import { Link,useNavigate } from "react-router-dom"

const Article = ()=>{
  const navigate = useNavigate()
  return (
    <div>
      文章页面
      <br/>
      {/* 声明式写法 */}
      <Link to='/login'>login</Link>
      {/* 命令式写法 */}
      <button onClick={()=>navigate('/login')}>跳转到login页面</button>
      <br/>

      
      {/* 传参数 第一种:问号传递参数 link和navigate都适用 */}
      <Link to='/login?id=100&name=zhangsan'>login(带参数)</Link>
      <button onClick={()=>navigate('/login?id=100&name=zhangsan')}>跳转到login页面(带参数)</button>
      {/* 第二种传参方式 */}
      <button onClick={()=>navigate('/login/2/jia')}>跳转到login页面(带参数)</button>
      {/* 需要再 路由配置的时候 加上 path: '/login/:id', */}
    </div>
  )
}
export default Article

4、login组件页面

import { Link, useParams, useSearchParams } from "react-router-dom"

const Login = ()=>{
  // 第一种传参方式
  // const [ params ] = useSearchParams();
  // console.log('第一种传参',Object.fromEntries(params.entries()));

  // 第二种传参方式
  const objParams = useParams();
  console.log('第二种传参',objParams);
  return (
    <div>
      登录页面
      <br/>
      <Link to='/article'>article</Link>
      {/* 第一种传参的页面上显示 */}
      {/* <ul>
        {Array.from(params.entries()).map(([key, value]) => (
          <li key={key}>
            {`${key}: ${value}`}
          </li>
        ))}
      </ul> */}
    </div>
  )
}
export default Login

React ,我们可以使用 React Router 来进行路由跳转传递参数。在传递参数,如果参数包含数组,我们可以使用 query string 的方式来传递。 例如,假设我们有一个包含数组的参数需要传递,我们可以将其转换为 JSON 字符串,并使用 encodeURIComponent 方法对其进行编码。然后,我们可以将编码后的字符串作为 query string 的值传递给目标路由。 以下是一个示例代码: ``` import React from 'react'; import { Link } from 'react-router-dom'; function MyComponent() { const myArray = [1, 2, 3]; const encodedArray = encodeURIComponent(JSON.stringify(myArray)); return ( <Link to={`/my-route?myArray=${encodedArray}`}>Go to My Route</Link> ); } export default MyComponent; ``` 在这个例子,我们将 myArray 数组转换为 JSON 字符串,并使用 encodeURIComponent 方法对其进行编码。然后,我们将编码后的字符串作为 myArray 参数的值,传递给目标路由的 query string 。 在目标路由,我们可以使用 React Router 提供的 useLocation hook 和 query-string 库来获取参数值,并将 JSON 字符串转换为数组。 以下是一个示例代码: ``` import React from 'react'; import { useLocation } from 'react-router-dom'; import queryString from 'query-string'; function MyRoute() { const { search } = useLocation(); const { myArray } = queryString.parse(search); const decodedArray = JSON.parse(decodeURIComponent(myArray)); return ( <div> <p>My Array: {decodedArray.join(', ')}</p> </div> ); } export default MyRoute; ``` 在这个例子,我们使用 useLocation hook 获取当前路由的 query string,然后使用 query-string 库解析参数值。最后,我们将编码后的字符串解码,并将 JSON 字符串转换为数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值