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

领优惠券的网站怎么做做蛋糕有哪些网站

领优惠券的网站怎么做,做蛋糕有哪些网站,唐山seo快速排名,vs做网站图片明明在文件夹里却找不到前言 HashRouter 是 React Router 提供的一种路由实现方案,它使用 URL 的 hash 部分(# 后面的内容)来实现客户端路由功能。 一、HashRouter 的核心用途 客户端路由:在不刷新页面的情况下管理应用导航兼容性:支持不支…

前言

HashRouterReact Router 提供的一种路由实现方案,它使用 URL 的 hash 部分# 后面的内容)来实现客户端路由功能。

一、HashRouter 的核心用途

  1. 客户端路由:在不刷新页面的情况下管理应用导航
  2. 兼容性:支持不支持 HTML5 History API 的旧浏览器
  3. 静态服务器支持:不需要服务器配置,适合静态托管环境
  4. 路由隔离:hash 部分不会发送到服务器,完全由客户端处理
  5. 部署简单:无需服务器重定向配置

二、HashRouter 与 BrowserRouter 的主要区别

在这里插入图片描述

三、HashRouter实现原理

HashRouter 利用 URL 的 hash 部分window.location.hash)来存储路由信息:

  1. 改变 hash 不会触发页面刷新
  2. 监听 hashchange 事件来响应路由变化
  3. 通过 window.location.hash 获取当前路由状态

四、HashRouter完整代码示例

import React, { useState } from 'react';
import { HashRouter, Routes, Route, Link, NavLink, useNavigate, useParams, useLocation } from 'react-router-dom';// 页面组件
const Home = () => (<div className="page home"><h2>🏠 欢迎来到首页</h2><p>这是一个使用 HashRouter 的 React 应用示例</p><div className="features"><div className="feature-card"><h3>兼容性强</h3><p>支持所有浏览器,包括旧版IE</p></div><div className="feature-card"><h3>部署简单</h3><p>不需要服务器配置,适合静态托管</p></div><div className="feature-card"><h3>路由隔离</h3><p>hash部分不会发送到服务器</p></div></div></div>
);const About = () => (<div className="page about"><h2>📝 关于我们</h2><p>我们是一个专注于前端技术的团队,致力于提供最佳用户体验</p><div className="team"><div className="member"><div className="avatar">👨‍💻</div><h3>张三</h3><p>前端架构师</p></div><div className="member"><div className="avatar">👩‍🎨</div><h3>李四</h3><p>UI设计师</p></div><div className="member"><div className="avatar">👨‍🏫</div><h3>王五</h3><p>技术顾问</p></div></div></div>
);// 产品列表页
const Products = () => {const products = [{ id: 1, name: 'React 教程', price: 99 },{ id: 2, name: 'JavaScript 高级编程', price: 129 },{ id: 3, name: 'CSS 大师课', price: 89 },];return (<div className="page products"><h2>🛒 产品列表</h2><div className="product-grid">{products.map(product => (<div key={product.id} className="product-card"><div className="product-image">📚</div><h3>{product.name}</h3><p>¥{product.price}</p><Link to={`/products/${product.id}`} className="btn">查看详情</Link></div>))}</div></div>);
};// 产品详情页(动态路由)
const ProductDetail = () => {const { id } = useParams();const location = useLocation();// 模拟产品数据const products = {1: { name: 'React 教程', description: '深入学习React框架的最佳指南', price: 99 },2: { name: 'JavaScript 高级编程', description: '掌握JavaScript高级技巧', price: 129 },3: { name: 'CSS 大师课', description: '成为CSS专家的必修课程', price: 89 },};const product = products[id] || {name: '未知产品',description: '该产品不存在',price: 0};return (<div className="page product-detail"><h2>🔍 产品详情</h2><div className="product-info"><div className="product-header"><h3>{product.name}</h3><p className="price">¥{product.price}</p></div><p>{product.description}</p><p className="meta">产品ID: {id} | 当前路径: {location.pathname}</p><Link to="/products" className="btn">← 返回产品列表</Link></div></div>);
};// 登录页(演示编程式导航)
const Login = () => {const navigate = useNavigate();const [username, setUsername] = useState('');const [password, setPassword] = useState('');const handleLogin = (e) => {e.preventDefault();// 模拟登录逻辑if (username && password) {// 登录成功后导航到仪表盘navigate('/dashboard');}};return (<div className="page login"><h2>🔑 用户登录</h2><form onSubmit={handleLogin}><div className="form-group"><label>用户名</label><input type="text" value={username} onChange={(e) => setUsername(e.target.value)}placeholder="输入用户名"/></div><div className="form-group"><label>密码</label><input type="password" value={password} onChange={(e) => setPassword(e.target.value)}placeholder="输入密码"/></div><button type="submit" className="btn">登录</button></form></div>);
};// 仪表盘页(受保护路由)
const Dashboard = () => {return (<div className="page dashboard"><h2>📊 用户仪表盘</h2><p>欢迎访问您的个人仪表盘!</p><div className="stats"><div className="stat-card"><h3>28</h3><p>已完成课程</p></div><div className="stat-card"><h3>12</h3><p>进行中课程</p></div><div className="stat-card"><h3>5</h3><p>收藏课程</p></div></div></div>);
};// 404 页面
const NotFound = () => (<div className="page not-found"><h2>🔍 404 - 页面未找到</h2><p>抱歉,您访问的页面不存在</p><Link to="/" className="btn">返回首页</Link></div>
);// 导航组件
const Navigation = () => {const location = useLocation();return (<nav><div className="logo"><Link to="/">HashRouter示例</Link></div><div className="nav-links"><NavLink to="/" end className={({isActive}) => isActive ? 'active' : ''}>首页</NavLink><NavLink to="/about" className={({isActive}) => isActive ? 'active' : ''}>关于</NavLink><NavLink to="/products" className={({isActive}) => isActive ? 'active' : ''}>产品</NavLink><NavLink to="/login" className={({isActive}) => isActive ? 'active' : ''}>登录</NavLink></div><div className="location-info">当前路径: <code>{location.pathname}</code></div></nav>);
};// 主应用组件
function App() {return (<HashRouter><div className="app"><Navigation /><main><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/products" element={<Products />} /><Route path="/products/:id" element={<ProductDetail />} /><Route path="/login" element={<Login />} /><Route path="/dashboard" element={<Dashboard />} /><Route path="*" element={<NotFound />} /></Routes></main><footer><p>使用 React Router HashRouter 实现 | 当前URL: {window.location.href}</p><div className="hash-info"><strong>Hash部分:</strong> {window.location.hash}</div></footer></div></HashRouter>);
}

五、HashRouter 关键特性详解

5.1、 基本路由配置

<HashRouter><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/products" element={<Products />} /><Route path="*" element={<NotFound />} /></Routes>
</HashRouter>

5.2、 动态路由参数

<Route path="/products/:id" element={<ProductDetail />} />// 在组件中获取参数
const ProductDetail = () => {const { id } = useParams();// ...
}

5.3、 编程式导航

const Login = () => {const navigate = useNavigate();const handleLogin = () => {// 登录逻辑...navigate('/dashboard'); // 跳转到仪表盘};// ...
}

5.4、 导航链接

// 普通链接
<Link to="/about">关于我们</Link>// 活动链接样式
<NavLink to="/products" className={({isActive}) => isActive ? 'active' : ''
}>产品
</NavLink>

5.5、 获取位置信息

const location = useLocation();
console.log(location.pathname); // 当前路径

六、使用场景建议

  1. 静态网站托管GitHub Pages、Netlify、Vercel 等静态托管服务
  2. 旧版浏览器支持:需要兼容 IE9 等不支持 History API 的浏览器
  3. 简单原型开发:快速搭建不需要复杂服务器配置的应用
  4. 混合应用:在传统多页应用中嵌入 SPA 模块

七、注意事项

  1. SEO 限制:搜索引擎对 hash 路由的索引支持有限
  2. URL 美观度URL 中的 # 符号可能影响美观
  3. 路由嵌套:与 BrowserRouter 的嵌套路由语法相同
  4. 锚点冲突hash 路由可能与传统页面锚点功能冲突
  5. 服务器通信hash 部分不会发送到服务器

总结

HashRouterReact Router 提供的一种简单易用的路由解决方案,特别适合不需要服务器配置需要兼容旧浏览器的场景。虽然它在 URL 美观度和 SEO 方面不如 BrowserRouter,但在特定环境下仍是不可或缺的工具。

http://www.dtcms.com/a/436247.html

相关文章:

  • 字母异位词分组 Java
  • 合肥网站快速排名优化做整站优化
  • 东莞网站建设方案托管鲜花网站数据库建设分析
  • 最流行网站开发工具贞丰县住房和城乡建设局网站
  • 网站做的和别人一样违法吗保定网站开发公司
  • 网站建设赠送seowordpress延时加载插件
  • 建设留学网站桂园精品网站建设费用
  • 注册营业执照网站wordpress文字可以动的插件
  • 清河网站建设费用深圳网络做网站
  • 厦门软件网站建设温州做阀门网站公司
  • thinkphp5做网站企业运营管理名词解释
  • 神农架网站建设搜狗做网站怎么样
  • 上上上海网站设计广州海珠区培训机构网站建设
  • 太原专业网站建设微信公众平台如何绑定网站
  • 天元建设集团有限公司设计院wordpress网站代码优化
  • 好题推荐——另类最小公倍数(gcd)
  • 电子商务网站建设预算福建已经宣布封城的城市
  • 《数据出境安全评估办法》企业应对策略
  • 关于营销方面的网站发软文的网站
  • 数据网站排名做婚恋网站的翻译好吗
  • 怎么认证网站硬件工程师40岁后的出路
  • 南通市住房和城乡建设厅网站电商公司注册经营范围
  • 手机网站返回按钮怎么做建设彩票网站合法吗
  • MIT 6.S081 Lab11:mmap
  • 网站建设售后服务内容北京网站建设公司 北京网站设计 网页设计制作 高端网站建设 分形科技
  • seo优化网站的手段济宁哪里有做网站的
  • 建设直播网站需要哪些许可证文章网站后台
  • 3 建设营销型网站流程图服装网站建设工作室
  • 天津市建设工程质量安全监督管理总队网站wordpress 登录用户信息
  • 男同志做爰网站线下推广app赚佣金