当前位置: 首页 > news >正文

react 的路由功能

1. 安装依赖

pnpm add react-router-dom

2. 基本的路由设置(BrowserRouter)

在 main.tsx 入口文件中使用`BrowserRouter`组件来包裹整个应用。它会监听浏览器的 URL 变化。

import { StrictMode } from "react";import { createRoot } from "react-dom/client";import { BrowserRouter } from "react-router-dom";import App from "./App.tsx";createRoot(document.getElementById('root')!).render(<BrowserRouter><App /></BrowserRouter>)

3. 定义路由和组件(Routes 和 Route)

在根组件 App.tsx 定义路由和对应组件。

import { Routes, Route } from "react-router-dom";import Home from "./components/Home";import About from "./components/About";import Contact from "./components/Contact";const App = () => {return (<div><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/contact" element={<Contact />} /></Routes></div>);};

4. 导航链接(Link)

在不刷新整个页面的情况下改变 URL 并触发相应的路由。

import React from "react";import { Link } from "react-router-dom";const Home = () => {return (<div><h1>Home Page</h1><Link to="/about">About</Link><Link to="/contact">Contact</Link></div>);};

5. 嵌套路由

例如:假设`About`组件内部还有子路由,如`About`组件中有`Team`和`History`两个子部分。

// App.jsimport { Routes, Route } from "react-router-dom";import Home from "./components/Home";import About from "./components/About";import Contact from "./components/Contact";const App = () => {return (<div><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />}><Route path="team" element={<Team />} /><Route path="history" element={<History />} /></Route><Route path="/contact" element={<Contact />} /></Routes></div>);};

然后在`About`组件中,需要使用`Outlet`组件来显示子路由对应的组件。

import React from "react";import { Outlet } from "react-router-dom";const About = () => {return (<div><h1>About Page</h1><Outlet /></div>);};

6. 编程式导航(useNavigate)

使用`useNavigate`钩子函数。

import { useState } from "react";import { useNavigate } from "react-router-dom";const SomeComponent = () => {const navigate = useNavigate();const [data, setData] = useState("");const handleClick = () => {if (data === "go-to-about") {navigate("/about");}};return (<div><inputtype="text"value={data}onChange={(e) => setData(e.target.value)}/><button onClick={handleClick}>Navigate</button></div>);};

http://www.lryc.cn/news/492709.html

相关文章:

  • SurfaceFlinger学习之一:概览
  • Qt关于窗口一直调用paintEvent的踩坑实录
  • C++11: STL之bind
  • 在线音乐播放器 —— 测试报告
  • 等保测评讲解:安全管理中心
  • vue3表单输入相关修饰符使用
  • CSS笔记(二)类名复用
  • TCP三次握手与四次挥手(TCP重传机制,2MSL)超详细!!!计算机网络
  • LCR 006. 两数之和 II - 输入有序数组
  • 网络安全在现代企业中的重要作用
  • 关于 EKS Bottlerocket AMI 版本与 Karpenter 配置的说明
  • Python实现人生重开模拟器
  • java——Spring Boot的配置加载顺序和优先级
  • 【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析
  • CSS:怎么把网站都变成灰色
  • 开发一个基于MACOS M1/2芯片的Android 12的模拟器
  • Flink 中 JDBC Connector 使用详解
  • 【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)
  • 未来已来?AI技术革新改变我们的生活
  • 【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)
  • 使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
  • 【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门
  • 道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
  • 若依框架部署在网站一个子目录下(/admin)问题(
  • 【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)
  • 对比C++,Rust在内存安全上做的努力
  • 如何利用 Qt 的模块化架构组织大型项目
  • 探索Python词云库WordCloud的奥秘
  • MySQL根据idb文件恢复数据
  • hadoop-mapreduce词频统计