参数传递有多种形式
   
- 
     对于GET请求,可以将参数通过
 
 localhost:3000?param1=value1
 
 的形式进行传递
- 
     也可以使用路径参数,将参数拼到url上
 
 localhost:3000/1/
 
- 对于POST请求,传递则是一整个对象
    
    
    一、? 传参 – useSearchParams
   
     
   
- 踩坑:包裹表达式的不是单引号,是“,tab键上面的符号,如果写成了单引号或者双引号就会是原样输出
`/hello?id=${id}`
    
    
    获取?后面的参数
   
- 
     函数式组件可以使用
 
 useSearchParams
 
 这个hook
- 
     
 useSearchParams
 
 用来匹配URL中?后面的搜索参数,所以仅仅只能用于?传参的形式
import { useSearchParams } from "react-router-dom";
const [searchParams, setSearchParams] = useSearchParams();
- 该hook返回一个数组,包含一个路径参数的对象,和改变路径参数的方法
- 要想获取路径参数上具体某一个参数的值,必须通过get,传入具体的key,获取value
const id = searchParams.get("id");
- 也可以判断参数存不存在
searchParams.has("id")
     
   
    
    
    修改路径参数,可以修改路径参数,从而继续跳转,具体场景有:猜你喜欢
   
setSearchParams({"id":2})
    
    
    二、 路由传参 – useParams
   
- 
     这种传参需要借助路由组件,共同配合,在路由组件后面通过
 
 :
 
 符号留一个占位符,至于
 
 :
 
 后面是什么属性名并不重要,只要层级对应上就可以,但是为了规范,一般还是要和传进去的参数名匹配上的
import { useParams } from "react-router-dom";
const params = useParams();
console.log(params)
     
   
    
    
    获取路由中的参数
   
- 
函数式组件可以使用 
 
 useParams
 
 这个hook
- 
useParams 用来匹配URL中的路由参数 
 
  
 
   
- 
useParams的返回值就是一个对象,key是路由组件的占位符的名字 
- 
相比于useSearchParams,用后端的数据结构来说,useSearchParams返回的数据结构是一个map,需要get对应的key才能获取,useParams返回的是对象可以直接点出来 
    
    
    三、 useMatch和useLocation
   
    
    
    useMatch
   
- 
     useMatch
 
 需要
 
 传入具体的url,react会帮你分析这个路径并返回
 
   
    
    
    useLocation
   
- 
     useMatch
 
 不需要
 
 传入具体的url
 
   
    
    
    四、 路由之间传值
   
    
    
    声明式导航传值
   
- 
     使用
 
 useLocation
 
 
   
    
    
    编程式导航传值
   
    使用
    
     useNavigate
    
- 
     useNavigate 也可以传递参数, useNavigate 的返回值可以有两个参数,第一个参数是跳转路径,第二个参数是可选的对象,对象内部有两个属性,一个是
 
 replace
 
 ,一个是想要传输的数据对象
 
 state
 
 
   
 
版权声明:本文为qq_40429067原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
