ReactRouter概念

97 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情

1. 单页应用

现代化的应用,因为极致的用户体验,使用户感觉页面体验非常棒。页面响应异常快速 优势: 避免整体页面刷新 用户体验变好

缺点:seo不太友好,由于整个应用只加载一次,所以首屏加载时间较久 但是缺点是可以挽救的,相对优势而言,大多数情况下是影响较小的,只有非常关注seo的网站,才会在这个问题上权衡

2. 路由的本质

概念来源于后端 : 一个路径表示匹配一个服务器资源 /a.html -> a对应的文件资源 /b.html -> b对应的文件资源,所见就是所得,访问的就是资源的路径地址。

共同的思想: 一对一的关系

前端的路由: 一个路径path对应唯一的一个组件comonent 当我们访问一个path 自动把path对应的组件进行渲染,页面初次会将所有模块加载到本地,只是应用中有状态控制页面只显示指定的页面,这个页面和url地址也是一一对应的。

import { BrowserRouter, Route, Routes, Link } from 'react-router-dom'
import Home from './Home'
import About from './About'
import Login from './Login'
function App () {
  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>
      <Routes>
        <Route path='/' element={<Home></Home>}></Route>
        <Route path='/about' element={<About></About>}></Route>
        <Route path='/login' element={<Login></Login>}></Route>
      </Routes>
    </BrowserRouter>
  )
}

export default App

编程式跳转

react-router-dom 中的hooks useNavigate ,通过这个hooks 获取 nvaigate方法,然后直接调用传入url就可以挑战了

import React from 'react'
import { useNavigate } from 'react-router-dom'
export default function Login() {
  const navigate = useNavigate()
  function goAbout() {
    navigate('/about?id=2323', {
      replace: true,
    })
  }
  return (
    <div>
      Login
      <button onClick={goAbout}>跳转关于</button>
    </div>
  )
}

路由传参

searchParams传参 路由跳转时通过query传参数,可以在函数组件中使用react-router-dom提供的hooks,useSearchParams获取当前的参数 使用方式,就是通过hooks useSearchParams 获取到一个数组,数组第一个参数就是searchParams对象,这个对象有一个get方法。

 const [params] = useSearchParams()
  console.log(params.get('id'))

其原理应该也只是使用了 URLSearchParams 这个对象

var x=new URLSearchParams('?id=2323')
x.get('id')
// '2323'

使用姿势

import React from 'react'
import { useSearchParams } from 'react-router-dom'
export default function About() {
  const [params] = useSearchParams()
  console.log(params.get('id'))
  return <div>About</div>
}