React 中的 BrowserRouter2025年03月17日 | 阅读 9 分钟 React Router 是 React 中用于路由的标准库。它能够实现在 React 应用程序中不同组件之间的视图导航,允许更改浏览器 URL,并使 UI 与 URL 保持同步。 为了理解 React Router 的工作原理,让我们创建一个简单的 React 应用程序。该应用程序将包含 Home、About 和 Contact 组件。我们将使用 React Router 在这些组件之间进行导航。 npx create-react-app![]() 您的开发环境已准备就绪。现在,让我们在应用程序中安装 React Router。 React Router:可以通过 npm 在您的 React 应用程序中安装 React Router。请遵循以下步骤在您的 React 应用程序中设置 Router: 步骤 1:CD 进入您的项目目录,例如,java。 步骤 2:使用以下命令安装 React Router npm install - -save react-router-dom ![]() 安装 react-router-dom 后,将其组件添加到您的 React 应用程序中。 添加 React Router 组件React Router 的主要组件是
路由不是按顺序遍历,而是根据最佳匹配进行选择。
要将 React Router 组件添加到您的应用程序中,请在您使用的编辑器中打开项目目录,然后转到 app.js 文件。现在,将以下代码添加到 app.js。 注意:BrowserRouter 的别名为 Router。使用 React Router:要使用 React Router,我们首先在 React 应用程序中创建一些组件。在您的项目目录中,在 src 文件夹内创建一个名为 components 的文件夹,然后在 components 文件夹中添加 3 个名为 home.js、about.js 和 contact.js 的文件。 ![]() 让我们向我们的 3 个组件添加一些代码 Home.jsAbout.jsContact.js现在,让我们将 React Router 组件包含在应用程序中 BrowserRouter:将别名为 router 的 BrowserRouter 添加到您的 app.js 文件中,以包装所有其他组件。BrowserRouter 是一个父组件,只能有一个子组件。 Links:现在让我们创建组件的链接。Link 组件使用 props 来描述链接应导航到的位置。 现在,在本地主机上运行您的应用程序,然后单击创建的链接。您会注意到 URL 根据 Link 组件的值发生了变化。 ![]() Route:Route 组件将帮助我们建立组件 UI 和 URL 之间的链接。要将路由包含在应用程序中,请将以下代码添加到您的 app.js。 组件现在已连接,单击任何链接都将渲染相应的组件。现在让我们尝试理解与根组件关联的 props。
注意:默认情况下,路由是包含性的,这意味着多个路由组件可以匹配一个 URL 路径并同时渲染。如果我们想渲染单个组件,我们需要在这里使用 Routes。Routes:要读取单个组件,请将所有路由包装在 Routes 组件中。 Switch 会在多个路由之间进行分组,遍历它们并找到第一个匹配路径的路由。因此,将渲染路径的相应组件。 这是我们添加所有组件后的完整源代码 现在,您可以单击链接并在不同组件之间导航。React Router 使您的应用程序 UI 与 URL 保持同步。 最后,我们使用 React Router 成功实现了 React 应用程序中的导航。 一个使用 HTML5 历史 API(pushstate、replacestate 和 popstate 事件)来保持 UI 与 URL 同步的 <router>。 basename: string所有位置的基础 URL。如果您的应用程序是从服务器上的子目录提供的,您将希望将其设置为该子目录。格式正确的 basename 必须包含前导斜杠,但不能包含尾随斜杠。 getUserConfirmation: func一个用于确认导航的函数。默认为使用 window.confirm。 forceRefresh: bool 如果为 true,Router 将在页面导航时使用全页刷新。您可能希望使用此选项来模仿传统服务器渲染应用程序在页面导航之间的行为。 keyLength: number location.Key 的长度。默认为 6。 children: node- 要渲染的子元素。 注意:在 React 中,您必须使用单个子元素,因为 render 方法不能返回多个元素。如果您需要多个元素,可以尝试将它们包装在额外的 <div> 或 <React.Fragment> 中。 <hash router>一个使用 URL 的哈希部分(即 window.location.hash)来保持 UI 与 URL 同步的 <router>。 注意:哈希不支持 history location.Key 或 location.State。在之前的版本中,我们尝试减少行为,但存在我们无法解决的边缘情况。任何需要此行为的代码或插件都将无法正常工作。由于此技术旨在仅支持较旧的浏览器,因此我们鼓励您配置服务器以使用 <BrowserHistory>。 basename: string 所有位置的基础 URL。格式正确的 basename 应包含前导斜杠,但不能包含尾随斜杠。 getUserConfirmation: func 一个用于确认导航的函数。默认为使用 window.confirm。 hashType: string 用于 **window.location.hash** 的编码。可用值是
默认为 "slash"。 children: node要渲染的单个子元素。 < Link> 提供声明式、可访问的应用程序导航。 to: string 链接位置的字符串表示,通过组合 location 的 pathname、search 和 hash 属性来创建。 一个可以包含以下任何属性的对象
to: func一个函数,其中当前位置作为参数传递,该函数必须返回位置表示(字符串或对象)。 replace: bool如果为 true,则单击 Link 将替换当前条目而不是添加新条目 internal ref: func从 React Router 5.1 开始,如果您使用的是 React 16,您将不需要此 prop,因为我们已将 ref 转发给底层 <a>。请使用普通 ref。 允许访问组件的内置 ref。 innerRef: RefObject 从 React Router 5.1 开始,如果您使用的是 React 16,您将不需要此 prop,因为我们已将 ref 转发给底层 <a>。请使用普通 ref。 使用 React.createRef 获取组件的底层 ref。 component: React.Component如果您想利用自己的导航组件,可以通过 component prop 来实现。 您还可以传递您希望在 <a> 标签上使用的 props,例如 title、id、className 等。 <NavLink>Link 的一个特殊版本,如果它匹配现有 URL,则会向渲染的元素添加样式属性。 className: string | funcclassName 可以是字符串,也可以是返回字符串的函数。如果使用函数 className,则会将链接的激活状态作为参数传递。如果您只想为非活动链接应用 className,这会很有帮助。 常见问题</NavLink> 在 React Router v6 中,activeClassName 将被移除,您应该使用函数 className 来为活动或非活动的 NavLink 组件应用 classname。 ActiveClassName: String当元素处于活动状态时要赋予它的类。默认给出的类是 active。它将与 classname prop 合并。 style: object | funcstyle 可以是 React.CSSProperties 对象,也可以是返回样式对象的函数。如果使用函数 style,则会将链接的激活状态作为参数传递。 在 React Router v6 中,活动样式将被移除,您必须使用函数 style 来为活动或非活动的 NavLink 组件应用内联样式。 Active Style: Object当元素处于活动状态时应用的样式。 exact: bool当为 true 时,活动类/样式仅在位置完全匹配时应用。 strict: bool如果为 true,则在确定位置是否与当前 URL 匹配时将考虑位置的 pathname 上的尾随斜杠。有关更多详细信息,请参阅 <route hardening> 文档。 isActive: func一个用于添加附加逻辑以确定 Link 是否处于活动状态的函数。当您需要比验证 Link 的 pathname 是否与当前 URL 的 pathname 匹配更多的操作时,应使用此选项。 location: objectisActive 与当前历史位置(通常是当前浏览器 URL)进行比较。 aria-current: string在活动 Link 上使用的 aria-current 属性的值。可用值是
下一个话题React vs. Svelte |
我们请求您订阅我们的新闻通讯以获取最新更新。