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

手机网站php开发天津市建设工程交易管理网站

手机网站php开发,天津市建设工程交易管理网站,个人网站建设网站排名优化,免费进入电影网站人人网入口十一、React Router 及前端路由管理 React 是一个单页面应用(SPA)框架,通常使用 React Router 进行路由管理。React Router 提供 客户端路由,避免页面刷新,提高用户体验。 (一)React Router 基…

十一、React Router 及前端路由管理

React 是一个单页面应用(SPA)框架,通常使用 React Router 进行路由管理。React Router 提供 客户端路由,避免页面刷新,提高用户体验。


(一)React Router 基本概念

React Router 采用 基于组件的路由,核心概念包括:

术语作用
BrowserRouter使应用支持 HTML5 History API 的路由
Routes用于包裹所有 Route 组件
Route定义 URL 与组件的映射关系
Link / NavLink生成前端导航链接
useNavigate编程式导航,替代 history.push
useParams获取 URL 动态参数
useLocation获取当前 URL 信息

(二)安装 React Router

npm install react-router-dom

(三)基本路由配置

1. 创建路由
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Home from "./Home";
import About from "./About";function App() {return (<BrowserRouter><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /></Routes></BrowserRouter>);
}export default App;
2. 创建 HomeAbout 组件
function Home() {return <h1>首页</h1>;
}function About() {return <h1>关于我们</h1>;
}

(四)导航链接 LinkNavLink

1. 使用 Link 进行跳转
import { Link } from "react-router-dom";function Navbar() {return (<nav><Link to="/">首页</Link><Link to="/about">关于我们</Link></nav>);
}
2. NavLink(添加选中状态)
import { NavLink } from "react-router-dom";function Navbar() {return (<nav><NavLink to="/" style={({ isActive }) => ({ color: isActive ? "red" : "black" })}>首页</NavLink><NavLink to="/about">关于我们</NavLink></nav>);
}

(五)动态路由与参数 useParams

1. 定义动态路由
<Routes><Route path="/user/:id" element={<User />} />
</Routes>
2. 获取路由参数
import { useParams } from "react-router-dom";function User() {const { id } = useParams();return <h1>用户 ID: {id}</h1>;
}

(六)编程式导航 useNavigate

1. 跳转到指定页面
import { useNavigate } from "react-router-dom";function Home() {const navigate = useNavigate();return (<div><h1>首页</h1><button onClick={() => navigate("/about")}>跳转到关于页</button></div>);
}
2. 传递参数
navigate("/user/123");

(七)获取当前路由 useLocation

import { useLocation } from "react-router-dom";function CurrentRoute() {const location = useLocation();return <h1>当前路径: {location.pathname}</h1>;
}

(八)嵌套路由(子路由)

1. 定义子路由
<Routes><Route path="/dashboard" element={<Dashboard />}><Route path="profile" element={<Profile />} /><Route path="settings" element={<Settings />} /></Route>
</Routes>
2. Dashboard 组件中渲染子组件
import { Outlet } from "react-router-dom";function Dashboard() {return (<div><h1>仪表盘</h1><Outlet /></div>);
}

(九)路由重定向

1. 使用 Navigate 组件
import { Navigate } from "react-router-dom";function NotFound() {return <Navigate to="/" />;
}

(十)路由守卫(权限控制)

1. 创建 ProtectedRoute 组件
import { Navigate } from "react-router-dom";function ProtectedRoute({ isAuth, children }) {return isAuth ? children : <Navigate to="/login" />;
}
2. 使用路由守卫
<Route path="/dashboard" element={<ProtectedRoute isAuth={isLoggedIn}><Dashboard /></ProtectedRoute>} />

十二、总结

1. React Router 核心概念

术语作用
Routes / Route定义路由
Link / NavLink导航链接
useNavigate编程式跳转
useParams获取动态参数
useLocation获取当前 URL
Navigate进行路由重定向
Outlet处理嵌套路由

2. 路由功能

  • 基本路由<Route path="/" element={<Home />} />
  • 动态路由<Route path="/user/:id" element={<User />} />
  • 导航链接<Link to="/about">关于我们</Link>
  • 编程式导航navigate("/dashboard")
  • 嵌套路由<Outlet />
  • 路由重定向<Navigate to="/" />
  • 路由守卫:封装 <ProtectedRoute> 组件

在大型 React 应用中,单独维护路由表 是一种更好的实践,可以提高可读性、可维护性和复用性。通常,开发者会在 routes.jsrouter/index.js 文件中集中管理路由。


(一)使用独立路由表

1. 创建 routes.js

// routes.js
import Home from "./pages/Home";
import About from "./pages/About";
import Dashboard from "./pages/Dashboard";
import Profile from "./pages/Profile";
import Settings from "./pages/Settings";
import NotFound from "./pages/NotFound";const routes = [{ path: "/", element: <Home /> },{ path: "/about", element: <About /> },{path: "/dashboard",element: <Dashboard />,children: [{ path: "profile", element: <Profile /> },{ path: "settings", element: <Settings /> },],},{ path: "*", element: <NotFound /> },
];export default routes;

2. App.js 里引入并渲染

// App.js
import { BrowserRouter, Routes, Route } from "react-router-dom";
import routes from "./routes";function App() {return (<BrowserRouter><Routes>{routes.map(({ path, element, children }) => (<Route key={path} path={path} element={element}>{children &&children.map((child) => (<Route key={child.path} path={child.path} element={child.element} />))}</Route>))}</Routes></BrowserRouter>);
}export default App;

(二)改进:使用 lazySuspense 进行按需加载

当页面较多时,可以使用 React.lazy 进行 按需加载(懒加载),减少首屏加载时间。

1. 修改 routes.js

import { lazy } from "react";const Home = lazy(() => import("./pages/Home"));
const About = lazy(() => import("./pages/About"));
const Dashboard = lazy(() => import("./pages/Dashboard"));
const Profile = lazy(() => import("./pages/Profile"));
const Settings = lazy(() => import("./pages/Settings"));
const NotFound = lazy(() => import("./pages/NotFound"));const routes = [{ path: "/", element: <Home /> },{ path: "/about", element: <About /> },{path: "/dashboard",element: <Dashboard />,children: [{ path: "profile", element: <Profile /> },{ path: "settings", element: <Settings /> },],},{ path: "*", element: <NotFound /> },
];export default routes;

2. App.js 里添加 Suspense

import { BrowserRouter, Routes, Route } from "react-router-dom";
import { Suspense } from "react";
import routes from "./routes";function App() {return (<BrowserRouter><Suspense fallback={<div>加载中...</div>}><Routes>{routes.map(({ path, element, children }) => (<Route key={path} path={path} element={element}>{children &&children.map((child) => (<Route key={child.path} path={child.path} element={child.element} />))}</Route>))}</Routes></Suspense></BrowserRouter>);
}export default App;

(三)结合路由守卫

routes.js 里可以添加 权限控制,通过 meta.auth 判断是否需要登录:

1. 修改 routes.js

import { lazy } from "react";
import ProtectedRoute from "./components/ProtectedRoute";const Home = lazy(() => import("./pages/Home"));
const About = lazy(() => import("./pages/About"));
const Dashboard = lazy(() => import("./pages/Dashboard"));
const Login = lazy(() => import("./pages/Login"));const routes = [{ path: "/", element: <Home /> },{ path: "/about", element: <About /> },{path: "/dashboard",element: <ProtectedRoute><Dashboard /></ProtectedRoute>,meta: { auth: true }, // 需要登录},{ path: "/login", element: <Login /> },
];export default routes;

2. 创建 ProtectedRoute.js

import { Navigate } from "react-router-dom";function ProtectedRoute({ children }) {const isLoggedIn = localStorage.getItem("token"); // 模拟鉴权return isLoggedIn ? children : <Navigate to="/login" />;
}export default ProtectedRoute;

总结

单独维护路由表,更易管理
支持嵌套路由,减少重复代码
支持懒加载,优化性能
支持路由守卫,可控访问权限

👉 这样可以让路由更加清晰、解耦,提高可维护性! 🚀

下一章:React 状态管理(Context API、Redux、Zustand) 🚀

http://www.dtcms.com/wzjs/820358.html

相关文章:

  • 深圳 做网站最新军事新闻头条重大
  • 给我一个网站贴吧网站开发实用技术
  • 珠海网站开发定制中国与菲律宾最新事件
  • 二次网站开发平台企业网站网页设计费用
  • 学习网站二次开发网站建设多久
  • 手机 网站 尺寸wordpress 特色 外链
  • 课程网站建设的背景手机搭建网站
  • 忻州市城乡建设管理局网站wordpress英文单词不显示完整
  • wordpress网站打开满网站编辑工具软件
  • 制作网站接单做么户网站怎么去前置审批
  • 张家港seo建站怎样制定一个网站建设方案
  • 网站开发北京公司网页设计导航栏尺寸
  • 保定做网站的公司win7局域网网站开发
  • 建设厅副厅长中山百度seo
  • 开发app的网站粤健康app下载
  • 公司网站忘了怎么做建设公司网站建设报价
  • 自学php制作网站有哪些软件网站建设推广平台网址
  • 河北网站建设公司巴彦淖尔网站建设
  • 企业网站seo案例分析微信号管理系统
  • 修改网站后台地址华建河北住房和城乡建设厅网站
  • 那些网站做的比较好品牌建设再发力
  • 怎么利用婚庆网站做营销大连做网站大公司
  • 福州网站建设好的公司外包网络安全管理制度
  • 免费建网站广告语搜索网站定制公司
  • 淄博建网站多少钱网站如何做支付系统
  • 建网站用什么工具网站建设说明书模板
  • 高端网站搭建做网站如何使用特殊字体
  • 江西省美丽乡村建设公布网站什么网站可以查建筑工程项目
  • 做计算机网站的总结都匀网站建设
  • asp化妆品网站 后台河北教育网站建设