中国核工业第五建设公司网站,建设交易网站多少钱,绍兴百度推广优化排名,专业的扬州网站建设react-router
React Router是一个用于构建单页面应用程序#xff08;SPA#xff09;的库#xff0c;它是用于管理React应用中页面导航和路由的工具。SPA是一种Web应用程序类型#xff0c;它在加载初始页面后#xff0c;通过JavaScript来动态加载并更新页面内容#xff0…react-router
React Router是一个用于构建单页面应用程序SPA的库它是用于管理React应用中页面导航和路由的工具。SPA是一种Web应用程序类型它在加载初始页面后通过JavaScript来动态加载并更新页面内容而不是在每次页面切换时都请求完整的新页面。通过React Router可以在React应用中实现客户端路由在不刷新整个页面的情况下切换到不同的视图或页面。
React Router是由多个包组成的库每个包都提供了不同的功能。以下是React Router主要的包 react-router-dom这是React Router的核心包用于构建Web应用的路由。它包括了用于在浏览器中实现客户端路由的组件如BrowserRouter、Route、Link等。大多数Web应用都会使用这个包来管理路由。 react-router-native这个包是React Router的一个扩展用于构建React Native应用的路由。它提供了类似于react-router-dom的API但专门针对React Native环境进行了优化。 react-router不带后缀这是React Router的核心包它包括了一些通用的路由功能可以在Web和Native应用中使用。但在实际开发中通常会使用react-router-dom或react-router-native具体根据应用类型来选择。
除了上述主要的包React Router还提供了一些辅助工具和附加功能的包 react-router-config这个包用于将路由配置信息提取到一个单独的地方以便于静态路由渲染。这对于服务器渲染React应用非常有用。 react-router-redux这个包用于与Redux集成以便在Redux存储中管理路由状态。 reach/router虽然不是React Router的一部分但它是一个与React Router兼容的替代品提供了一些不同的API和性能特性。它专注于可访问性和无障碍性。
在大多数情况下使用react-router-dom是构建Web应用的首选选择。
react-router-dom
react-router-dom提供了许多API用于构建Web应用的客户端路由。以下是一些react-router-dom的主要API以及它们的简单示例用法
BrowserRouter用于包装应用程序启用基于浏览器的路由。
import { BrowserRouter, Route } from react-router-dom;function App() {return (BrowserRouterRoute exact path/ component{Home} /Route path/about component{About} //BrowserRouter);
}Route用于定义路由匹配的路径和要渲染的组件。
import { Route } from react-router-dom;function App() {return (divRoute exact path/ component{Home} /Route path/about component{About} //div);
}Link用于创建导航链接。
import { Link } from react-router-dom;function Navigation() {return (navulliLink to/Home/Link/liliLink to/aboutAbout/Link/li/ul/nav);
}Switch用于包装多个Route只渲染第一个匹配的路由。
import { Switch, Route } from react-router-dom;function App() {return (SwitchRoute exact path/ component{Home} /Route path/about component{About} /Route component{NotFound} //Switch);
}Redirect用于在路由重定向时进行配置。
import { Redirect } from react-router-dom;function App() {return (divSwitchRoute exact path/ render{() Redirect to/home /} /Route path/home component{Home} /Route path/about component{About} //Switch/div);
}React Router DOM提供的自定义Hook react-router-dom还提供了一些自定义Hook用于在函数组件中访问路由相关信息。例如 useHistory: useHistory Hook 允许你在组件中访问路由历史对象以便进行编程式导航例如在按钮点击或其他事件中跳转到不同的路由。 import { useHistory } from react-router-dom;function MyComponent() {const history useHistory();const handleButtonClick () {// 编程式导航到/about路由history.push(/about);};return (divbutton onClick{handleButtonClick}Go to About/button/div);
}useLocation: useLocation Hook 允许你访问当前路由的location对象包括路径、查询参数等信息。 import { useLocation } from react-router-dom;function MyComponent() {const location useLocation();return (divpCurrent Path: {location.pathname}/ppQuery Parameters: {location.search}/p/div);
}useParams: useParams Hook 用于获取当前路由的动态路由参数。当你在路由定义中使用参数占位符时你可以使用这个Hook来获取传递给路由的参数值。 import { useParams } from react-router-dom;function UserProfile() {const { username } useParams();return (divh2User Profile/h2pUsername: {username}/p/div);
}参数传递
在react-router-dom中你可以使用路由参数来传递和获取参数。参数通常用于将动态数据传递给组件例如用户ID或产品ID。 定义带参数的路由 首先在路由配置中定义带有参数的路由。使用:parameterName来表示参数占位符。例如 Route path/user/:userId component{UserProfile} /使用useParams Hook获取参数 在要接收参数的组件中使用useParams Hook来获取参数的值。例如 import { useParams } from react-router-dom;function UserProfile() {const { userId } useParams();return (divh2User Profile/h2pUser ID: {userId}/p/div);
}在上面的示例中使用useParams Hook来获取路由参数中的userId。这个参数的值将根据实际的路由路径动态获取。 传递参数 若要传递参数到带参数的路由可以在Link组件或编程式导航中设置参数。例如 使用Link组件 import { Link } from react-router-dom;function UserList() {return (ulliLink to/user/1User 1/Link/liliLink to/user/2User 2/Link/li{/* ... */}/ul);
}编程式导航 import { useHistory } from react-router-dom;function navigateToUserProfile(userId) {const history useHistory();history.push(/user/${userId});
}V5 和 V6的使用区别
Switch 全部改为 Routes
// v5import {Route, Switch} from react-router-dom //引入react-routerdivSwitch/Switch
/div// v6import {Route, Routes } from react-router-dom //引入react-routerdivRoutes /Routes/divRoute 的 render 和 component 改为 element且可以嵌套路由
// v5import {Route, Switch} from react-router-dom //引入react-router
divSwitchRoute path/aboutAbout //Route/Switch
/div
// v6import {Route, Routes } from react-router-dom //引入react-router
divRoutes Route path/about element{About /} //Routes
/divto、navigate、path 不以 / 开头都是相对路径与 cd 命令行类似 在 v5 中以 / 开头的 Link to 值是不明确的它取决于当前的 URL 是什么。例如如果当前的 URL 是 /users 那么 v5 中的 将呈现为 a href/me 。然而如果当前的 URL 有一个尾随斜杠比如 /users/ 同样的 将呈现为 a href/users/me 。这使得很难预测链接的行为因此在 v5 中从根 URL使用 match.url 构建链接而不是使用相对的 Link to 值。 React Router v6 修复了这种不确定性。在 v6 中无论当前的 URL 是什么 Link tome 都将始终呈现相同的 a href 。 例如在 Route pathusers 中呈现的 Link tome 将始终呈现到 /users/me 的链接无论当前的 URL 是否有尾随斜杠。 v6 用useNavigate实现编程式导航不再使用useHistory naviaget(to)默认就是 history.pushnaviaget(to, { replace: true })就是 history.replacenaviaget(to: number)就是 history.go。
import { useNavigate } from react-router-dom;function App() {const navigate useNavigate();function handleClick() {navigate(/home);}return (divbutton onClick{handleClick}go home/button/div);
}