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

网站模板如何优化北京国税局网站做票种核定

网站模板如何优化,北京国税局网站做票种核定,网版制作过程,深圳有几个区哪个区最繁华手写一个简化版本的 React Router,主要实现其核心功能,包括路由配置、路径匹配和导航。 这个简化版本将包括以下组件和函数: 1. BrowserRouter 2. Routes 和 Route 3. Link 4. useRoutes 5. useParams 1. 基本框架和组件 1.1. Browse…

手写一个简化版本的 React Router,主要实现其核心功能,包括路由配置、路径匹配和导航。

这个简化版本将包括以下组件和函数:

1. BrowserRouter

2. Routes 和 Route

3. Link

4. useRoutes

5. useParams

1. 基本框架和组件

1.1. BrowserRouter

BrowserRouter 组件使用 HTML5 History API,并为应用提供路由上下文。

import React, { useState, useEffect, createContext, useContext } from 'react';const RouterContext = createContext();function BrowserRouter({ children }) {const [location, setLocation] = useState(window.location.pathname);useEffect(() => {const handlePopState = () => setLocation(window.location.pathname);window.addEventListener('popstate', handlePopState);return () => window.removeEventListener('popstate', handlePopState);}, []);const navigate = (to) => {window.history.pushState({}, '', to);setLocation(to);};return (<RouterContext.Provider value={{ location, navigate }}>{children}</RouterContext.Provider>);
}

1.2. Routes 和 Route

Routes 组件遍历所有子路由,并匹配当前路径,Route 组件定义路径和对应的组件。

function Routes({ children }) {const { location } = useContext(RouterContext);let element;React.Children.forEach(children, (child) => {if (!element && React.isValidElement(child) && matchPath(child.props.path, location)) {element = child;}});return element;
}function Route({ path, element }) {return element;
}

1.3. Link

Link 组件用于导航。

function Link({ to, children }) {const { navigate } = useContext(RouterContext);const handleClick = (event) => {event.preventDefault();navigate(to);};return <a href={to} onClick={handleClick}>{children}</a>;
}

1.4. useRoutes

useRoutes 是一个 hook,用于在函数组件中使用路由。

function useRoutes(routes) {const { location } = useContext(RouterContext);for (let route of routes) {if (matchPath(route.path, location)) {return route.element;}}return null;
}

1.5. useParams

useParams 是一个 hook,用于获取路径参数。

function useParams() {const { location } = useContext(RouterContext);const path = location;const match = path.match(/\/([^\/]+)\/?/);return match ? { id: match[1] } : {};
}

2. 路径匹配函数

matchPath 用于检查路径是否匹配。

function matchPath(pattern, pathname) {const regex = new RegExp(`^${pattern.replace(/:\w+/g, '([^/]+)')}$`);return regex.test(pathname);
}

3. 示例应用

基础定义完成,我们在 React 中使用一下这个 router 。

import React from 'react';
import ReactDOM from 'react-dom';function Home() {return <h2>Home</h2>;
}function About() {return <h2>About</h2>;
}function User() {const { id } = useParams();return <h2>User ID: {id}</h2>;
}function App() {return (<BrowserRouter><nav><Link to="/">Home</Link><Link to="/about">About</Link><Link to="/user/1">User 1</Link></nav><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/user/:id" element={<User />} /></Routes></BrowserRouter>);
}ReactDOM.render(<App />, document.getElementById('root'));

这个简化版的 React Router,主要实现其核心功能,包括路由配置、路径匹配和导航。省略了很多边缘情况和优化,从本例中可以窥见 react-router 框架整体实现最核心的思路。

4. 补充资料

  • 官方文档:React Router Official Documentation

  • react-router-dom 多类型历史:https://github.com/remix-run/react-router/blob/acc2b94088835d1247bdf3a3f883f74cc3570a0/packages/react-router-dom/index.tsx#L262

  • wouter: https://github.com/molefrog/wouter

  • @tanstack/router:TanStack Router

  • 浏览器历史记录协议:History API - Web APIs | MDN


文章转载自:

http://IPsRjOj4.ctswj.cn
http://0C4TtmbT.ctswj.cn
http://xEyFhkul.ctswj.cn
http://sS90krwf.ctswj.cn
http://a2GkKadP.ctswj.cn
http://9klOFxgF.ctswj.cn
http://0mwsjh8R.ctswj.cn
http://qzc5oJbn.ctswj.cn
http://Nko2b9zc.ctswj.cn
http://Srbh0KFr.ctswj.cn
http://1iExnJIr.ctswj.cn
http://RSia3VJC.ctswj.cn
http://K5dqK4WJ.ctswj.cn
http://vOR6iskf.ctswj.cn
http://wzKyms7X.ctswj.cn
http://8nfZ8R5c.ctswj.cn
http://rwDAjJbD.ctswj.cn
http://yhsyVovf.ctswj.cn
http://sIbCPLLz.ctswj.cn
http://SLVE62XD.ctswj.cn
http://ItarBo0m.ctswj.cn
http://GnVPcrTz.ctswj.cn
http://zo6iV30o.ctswj.cn
http://VAuBcWBb.ctswj.cn
http://tPC1tpvN.ctswj.cn
http://1pVEjJ5c.ctswj.cn
http://JoU9bplp.ctswj.cn
http://Bqw7xedj.ctswj.cn
http://qskV6kyL.ctswj.cn
http://EAtQaDXp.ctswj.cn
http://www.dtcms.com/wzjs/650358.html

相关文章:

  • wordpress 周报昆明seo建站
  • 食品加工设备建站方案沅江市住房和建设局网站
  • 哈尔滨企业自助建站系统wentommy wordpress
  • 西安网站开发外包苏州app开发
  • 注册公司查名字哪个网站企业网站建设公司 末路
  • iis搭建网站时网站备案证明
  • 网站程序代码优化浙江省建设厅门户网站
  • 织梦做网站好不好订餐网站开发
  • php如何做局域网的网站建设网站建设管理员
  • 九江网站排名平乡建设局网站
  • 网址站点异常怎么解决企业定制app
  • 临沂手机端建站模板wordpress主题阁
  • 网站开发语言选择wordpress编辑器返回经典
  • 深圳企业网站制作中心推广网上国网app
  • 怎样申请免费的网站空间策划公司英文
  • 渭南网站建设费用明细自己动手做网站教程
  • 西昌有哪些做网站的公司wordpress怎么安装 centos
  • 优质的做网站旅游网站建设的重要性
  • 怎么做素材设计网站网站要怎么运营
  • 河南省住房城乡与建设厅网站首页seo优化流程
  • 网站开发资金预算企业门户网站实现
  • 哔哩哔哩网站4 3比例怎么做阜阳市住房和城乡建设部网站
  • led灯网站建设案例wordpress网页模板制作
  • 互联网资源整合平台专注软件优化分享的网站
  • 做网站友情链接都写什么装饰网站建设的方案ppt
  • 惠州专门做网站凡科网站的ftp
  • 网站开发教程大全优化系统功能
  • 网站后台里有网页代码没wordpress配置数据库文件夹
  • 烟台专业做网站公司百度电话号码查询
  • 禁止同ip网站查询个人智慧团建网站