📅  最后修改于: 2020-12-19 08:39:34             🧑  作者: Mango
路由是一个过程,其中根据用户的操作或请求将用户定向到不同的页面。 ReactJS Router主要用于开发单页Web应用程序。 React Router用于在应用程序中定义多个路由。当用户在浏览器中键入特定的URL,并且此URL路径与路由器文件中的任何“路由”匹配时,该用户将被重定向到该特定的路由。
React Router是在React之上构建的标准库系统,用于使用React Router Package在React应用程序中创建路由。它为浏览器上的同步URL提供了将在网页上显示的数据。它保持了应用程序的标准结构和行为,并且主要用于开发单页Web应用程序。
React Router在一个页面应用程序中显示多个视图的过程中扮演着重要的角色。没有React Router,就无法在React应用程序中显示多个视图。大多数社交媒体网站(如Facebook,Instagram)都使用React Router呈现多个视图。
React包含三个不同的路由包。这些是:
无法在您的应用程序中直接安装react-router。要使用反应路由,首先,您需要在应用程序中安装react-router-dom模块。以下命令用于安装React Router dom。
$ npm install react-router-dom --save
路由器组件有两种类型:
步骤1:在我们的项目中,我们将与已经存在的App.js一起创建另外两个组件。
About.js
import React from 'react'
class About extends React.Component {
render() {
return About
}
}
export default About
Contact.js
import React from 'react'
class Contact extends React.Component {
render() {
return Contact
}
}
export default Contact
App.js
import React from 'react'
class App extends React.Component {
render() {
return (
Home
)
}
}
export default App
步骤2:对于“路由”,打开index.js文件并导入其中的所有三个组件文件。在这里,您需要导入以下行:从“ react-router-dom”导入{Route,Link,BrowserRouter as Router},这有助于我们实现路由。现在,我们的index.js文件如下所示。
它用于根据指定的路径定义和渲染组件。它将接受组件并渲染以定义应渲染的内容。
Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Route, Link, BrowserRouter as Router } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
const routing = (
React Router Example
)
ReactDOM.render(routing, document.getElementById('root'));
步骤3:打开命令提示符,转到您的项目位置,然后键入npm start 。您将获得以下屏幕。
现在,如果您在浏览器中手动输入:localhost:3000 / about ,您将在屏幕上看到About组件被渲染。
步骤4:在以上屏幕中,您可以看到Home组件仍在渲染。这是因为主路径是“ / ”,而about路径是“ / about ”,因此您可以观察到在两个路径中都使用斜杠是常见的,这两个元素都呈现出来。要停止这种行为,您需要使用确切的道具。在下面的示例中可以看到。
Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Route, Link, BrowserRouter as Router } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
const routing = (
React Router Example
)
ReactDOM.render(routing, document.getElementById('root'));
输出量
有时,我们希望在单个页面上需要多个链接。当我们单击任何特定的Link时,它应该加载与该路径关联的页面,而无需重新加载网页。为此,我们需要在index.js文件中导入组件。
该组件用于创建允许浏览不同URL并呈现其内容而无需重新加载网页的链接。
例
Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Route, Link, BrowserRouter as Router } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
const routing = (
React Router Example
-
Home
-
About
-
Contact
)
ReactDOM.render(routing, document.getElementById('root'));
输出量
添加链接后,您可以看到路由已在屏幕上呈现。现在,如果单击About ,您将看到URL正在更改,并且About组件已呈现。
现在,我们需要向链接添加一些样式。这样,当我们单击任何特定链接时,可以轻松确定哪个Link是活动的。为此,路由器提供了一个新的技巧NavLink而不是Link 。现在,在index.js文件中,替换Navlink中的Link并添加属性activeStyle 。 activeStyle属性意味着当我们单击链接时,它应该具有特定的样式,以便我们可以区分当前处于活动状态的样式。
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link, NavLink } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
const routing = (
React Router Example
-
Home
-
About
-
Contact
)
ReactDOM.render(routing, document.getElementById('root'));
输出量
当我们执行上述程序时,将获得以下屏幕,在该屏幕中我们可以看到Home链接为红色,并且是当前唯一活动的链接。
现在,当我们单击“关于”链接时,其颜色显示为绿色,这是当前活动的链接。
Link组件允许浏览网站上的不同路线,而NavLink组件用于向活动路线添加样式。
< Switch >组件仅在路径匹配时才用于渲染组件。否则,它将返回到未找到的组件。
要理解这一点,首先,我们需要创建一个NOTFOUND组件。
notfound.js
import React from 'react'
const Notfound = () => Not found
export default Notfound
现在,导入
Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link, NavLink, Switch } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
import Notfound from './notfound'
const routing = (
React Router Example
-
Home
-
About
-
Contact
)
ReactDOM.render(routing, document.getElementById('root'));
输出量
如果我们手动输入错误的路径,它将给出未找到的错误。
嵌套路由允许您在应用程序中呈现子路由。在下面的示例中可以理解。
例
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Link, NavLink, Switch } from 'react-router-dom'
import './index.css';
import App from './App';
import About from './about'
import Contact from './contact'
import Notfound from './notfound'
const routing = (
React Router Example
-
Home
-
About
-
Contact
)
ReactDOM.render(routing, document.getElementById('root'));
在contact.js文件中,我们需要导入React Router组件以实现subroutes 。
contact.js
import React from 'react'
import { Route, Link } from 'react-router-dom'
const Contacts = ({ match }) => {match.params.id}
class Contact extends React.Component {
render() {
const { url } = this.props.match
return (
Welcome to Contact Page
Select contact Id
-
Contacts 1
-
Contacts 2
-
Contacts 3
-
Contacts 4
)
}
}
export default Contact
输出量
当我们执行上面的程序时,我们将得到以下输出。
单击“联系人”链接后,我们将获得联系人列表。现在,选择任何联系人,我们将获得相应的输出。可以在下面的示例中显示。
React Router的优点如下: