react-router的使用

react-router的版本

react-router有三个版本:

  • react-router:服务端渲染使用
  • react-router-dom:浏览器端渲染使用(一般常使用这个)
  • react-router-native:React-native混合开发使用

路由环境集成

从版本的react-router6.x开始,路由彻底改变了,和以前的版本完全不兼容。react-router5还可以用于类组件,而react-router6版本只能用于函数组件且使用语法也发生了改变。

安装:

sh 复制代码
# ts开发需要下载模块"react-router-dom"和 "@types/react-router-dom"
下载指令:npm i --save react-router-dom @types/react-router-dom

# js开发只需下载模块"react-router-dom"
下载指令:npm i --save react-router-dom

React-router使用步骤

  1. 引入BroserRouter组件或者HashRouter组件来包裹要使用路由的根组件(BroserRouter组件和HashRouter组件相当于创建路由)
  2. 使用Routes组件,注册路由(Routes组件相当于注册路由的组件,类似于Vue中注册路由的数组)
  3. 使用Route组件,定义路由需要加载的组件(Route组件相当于注册的路由需要加载的组件,类似于Vue中注册路由数组中的对象)

路由引入

js 复制代码
import {  
    BrowserRouter as Router,
    HashRouter,
    Route, 
    Routes,
    Link,
    useNavigate,
    useParams,
    useLocation,
    Navigate
} from 'react-router-dom';

BrowserRouter太长,常常使用别名Routeras语法是import引入时将export具名导出的变量换一个标识符。

BrowserRouter代表的是history路由模式,HashRouter代表的是hash路由模式。

BrowserRouterHashRouter在整个项目中这两个标签只用一次,子路由嵌套时不需要使用。

创建路由和注册路由

创建路由

js 复制代码
// main.jsx
import { createRoot } from 'react-dom/client' // 用于渲染页面的
import React from 'react' // 用于创建组件的
import { BrowserRouter as Router } from 'react-router-dom' // 引入路由
import App from './App.jsx'

createRoot(document.getElementById('root')).render(
    <Router>
        <App />
    </Router>
)

使用BrowserRouter组件包裹的组件就可以使用history路由。Routes组件和Route组件只能在使用BrowserRouter组件或者HashRouter组件包裹的组件中的子组件中使用。

注册路由

js 复制代码
// App.jsx
import React from "react"
import { Routes, Route } from "react-router-dom"
import Home from "./Home.jsx"
import Shop from "./Shop.jsx"
export default function App() {
  return (
    <>
      <div>这是一个项目</div>
      <Routes>
        <Route path="/home" element={<Home></Home>}></Route>
        <Route path="/shop" element={<Shop></Shop>}></Route>
      </Routes>
    </>
  )
}

<div>这是一个项目</div>是页面一定会加载的内容,当网址匹配成功就会加载Route组件对应的element属性中的组件,网址匹配是做全等判断。如果存在星号路由,只要星号路由匹配上了后面的网址就不会再进行匹配,星号路由可以匹配任意网址。

BrowserRouter组件或者HashRouter组件中嵌套Routes组件,相当于注册路由,类似于Vue中注册路由的数组。Routes组件中嵌套Route组件,相当于注册的路由需要加载的组件,类似于Vue中注册路由数组中的对象。

Route组件属性详情:

  • path属性:用于设置匹配到的路径
  • element属性:设置匹配到路径后要渲染的组件,这个属性是要一个组件,所以引入的方法需要加一个<>尖括号才是一个组件。

React的全局插件使用方式

React中没有Vue那样的vue.use方法,React中使用一个插件或者库,都是引入一个组件,然后把要使用该插件的部分用引入的组件包裹起来。

相关推荐
screct_demo3 小时前
詳細講一下在RN(ReactNative)中,6個比較常用的組件以及詳細的用法
javascript·react native·react.js
光头程序员11 小时前
grid 布局react组件可以循数据自定义渲染某个数据 ,或插入某些数据在某个索引下
javascript·react.js·ecmascript
limit for me11 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者11 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
VillanelleS15 小时前
React进阶之高阶组件HOC、react hooks、自定义hooks
前端·react.js·前端框架
傻小胖15 小时前
React 中hooks之useInsertionEffect用法总结
前端·javascript·react.js
flying robot1 天前
React的响应式
前端·javascript·react.js
GISer_Jing1 天前
React+AntDesign实现类似Chatgpt交互界面
前端·javascript·react.js·前端框架
智界工具库2 天前
【探索前端技术之 React Three.js—— 简单的人脸动捕与 3D 模型表情同步应用】
前端·javascript·react.js
我是前端小学生2 天前
我们应该在什么场景下使用 useMemo 和 useCallback ?
react.js