安装
yarn add react-router-dom
react-router-dom
这个包提供了三个核心的组件
import { HashRouter, Route, Link } from 'react-router-dom'
使用HashRouter
包裹整个应用,一个项目中只会有一个Router
// … 省略页面内容
使用Link指定导航链接
页面一
页面2
使用Route
指定路由规则
{/* 想要精确匹配 exact */}
如果不是精确匹配:如果路由是/Comment
则能匹配到/Comment和/Comment2
完全代码
import Comment from "./components4/Comment";
import Search from "./components4/Search";
import React from "react";
import {Route,HashRouter,Link,NavLink,Switch} from "react-router-dom";
class App extends React.Component {
render(){
return (
页面一
页面2
{/* 想要精确匹配 exact */}
)
}
}
通常,我们会把Route
包裹在一个Switch
组件中
在Switch
组件中,不管有多少个路由规则匹配到了,都只会渲染第一个匹配的组件
通过Switch
组件非常容易的就能实现404错误页面的提示
//不指定path匹配不成功则匹配404
在React中,配置嵌套路由非常的简单,因为Route
就是一个组件,可以在任意想配置的地方进行配置
但是配置嵌套路由的时候,需要对路径进行处理,必须要先匹配到父级路由,才能匹配到子路由
在一级路由中如下配置
我想进入/Search的二级路由 这是一级路由配置
import Comment from "./components4/Comment";
import Search from "./components4/Search";
import "./components4/style/index.scss";
import React from "react";
import {Route,HashRouter,Link,NavLink,Switch} from "react-router-dom";
class App extends React.Component {
render(){
return (
页面一
页面2
{/*Switch:只要有一个匹配成功*/}
{/* 想要精确匹配 exact */}
)
}
}
在二级路由中配置
import React from "react";
import Child from "./Child.js";
import {Route,Link} from "react-router-dom";
class Search extends React.Component {
render(){
return (
Search
点我进入我的二级路由
)
}
}
export default Search
下面是Child.js
import React from "react";
class Child extends React.Component {
render(){
return (
Child
)
}
}
export default Child
场景:点击登录按钮,登录成功后,通过代码跳转到后台首页,如何实现?
编程式导航:通过 JS 代码来实现页面跳转
history 是 React 路由提供的,用于获取浏览器历史记录的相关信息
push(path):跳转到某个页面,参数 path 表示要跳转的路径
go(n): 前进或后退到某个页面,参数 n 表示前进或后退页面数量(比如:-1 表示后退到上一页)
class Login extends Component {
handleLogin = () => {
// ...
this.props.history.push('/home')
}
render() {...省略其他代码}
可以使用:id
的方式来配置动态的路由参数
// 可以匹配 /users/1 /users/2 /users/xxx
在组件中,通过props
可以接收到路由的参数
render(){
console.log(this.props.match.params)
}