react中useLocation、useNavigate、useParams、useSearchParams的使用

1、假设现在有一个注册页面,从注册页面需要跳转到登陆页面,此时可以使用useNavigate来进行(在页面跳转的同时也可以传递参数)

import React from "react";
import {useNavigate} from 'react-router-dom'
const Register = () => {
  const navigate = useNavigate();
  const toLogin = () => {
    
    /* 
      第一种:params传递参数
      此方式传递参数:需要注意的是在路由中需要配置占位符
    */
    navigate('/login/17');

    /* 第二种:search传递参数 */
    navigate('/login?name=xiaoming&age=10')

    /* 第三种:state属性携带参数 */
    navigate('/login',{state: '我从登陆页面过来了!!!'})

  }

  return (
    <div>
     注册页面
     <button onClick={toLogin}>跳转到登陆页面</button>
    </div>
  )
}
export default Register;

(1)params传递参数需要在路由中配置占位符

import React from "react";
import { Route, BrowserRouter, Routes } from "react-router-dom";
import Login from "../pages/login";
import Register from "../pages/register";
import App from "../App.jsx";
import List from "../pages/list";
import Material from "../pages/material";
import Edit from "../pages/edit";

/* 将所有页面的路由统一进行配置 */
const baseRouter = () => (
	<BrowserRouter>
		<Routes>
			<Route path="/" element={<App />}>
				<Route path="/list" element={<List />}></Route>
				<Route path="/edit" element={<Edit />}></Route>
				<Route path="/material" element={<Material />}></Route>
			</Route>
			<Route path="/login" element={<Login />}></Route>
			<Route path="/login/:id" element={<Login />}></Route>
			<Route path="/register" element={<Register />}></Route>
		</Routes>
	</BrowserRouter>
);

export default baseRouter;

2、登陆页面可以利用useLocation或者useParams来进行参数的接收

import React, { useEffect } from "react";
import { useLocation, useParams, useSearchParams} from 'react-router-dom'
const Login = () => { 

  /* 第一种params方法传递参数:用useParams来获取 */
  const getParams = useParams();

  /* 第二种search方法传递参数:用useSearchParams来获取*/
  const [getSearchArr] = useSearchParams();

  /* 第三种state属性携带参数:用useLocation来获取 */
  const currentLocation = useLocation();


  useEffect(() => {
     /*
      第一种:获取params方式携带过来的参数 
      {
        id: '17'
      }
    */
    console.log(getParams, 'getParamsis')

    /* 第二种:获取search方式携带过来的参数 */
    console.log(getSearchArr,getSearchArr.getAll('name'))//['xiaoming']
    console.log(getSearchArr,getSearchArr.getAll('age'))//['10']

    /* 
      第三种:state属性传递参数
      {
        hash: ""
        key: "jtlqbuv6"
        pathname: "/login"
        search: ""
        state: "我从登陆页面过来了!!!"
      } 
    */
    console.log(currentLocation);
  }, [])

  return (
    <div>
     登陆页面
    </div>
  )
}
export default Login;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐