在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
安装输入以下命令进行安装: // npm npm install react-router-dom // yarn yarn add react-router-dom react-router相关标签
import { BrowserRouter, HashRouter, Route, Redirect, Switch, Link, NavLink, withRouter, } from 'react-router-dom' 简单路由跳转实现一个简单的一级路由跳转 import { BrowserRouter as Router, Route, Link } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <Link to="/home" className="link">跳转Home页面</Link> <Link to="/about" className="link">跳转About页面</Link> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> </Router> </div> ); } export default App; 效果如下: 要点总结:
嵌套路由跳转
例如,在 import { BrowserRouter as Router, Route, Link, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <Link to="/home">跳转Home页面</Link> <Link to="/about">跳转About页面</Link> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> </Router> </div> ); } export default App; 然后 import React from 'react' import { Route, Link, } from 'react-router-dom' import One from './one' import Two from './two' function Home () { return ( <> 我是Home页面 <Link to="/home/one">跳转到Home/one页面</Link> <Link to="/home/two">跳转到Home/two页面</Link> <Route path="/home/one" component={One}/> <Route path="/home/two" component={Two}/> </> ) } export default Home 特别注意: 动态链接
import { BrowserRouter as Router, Route, NavLink } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <NavLink to="/home" className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> </Router> </div> ); } export default App; /* 设置active类的样式 */ .active { font-weight: blod; color: red; } 效果如下: 路由匹配优化当点击跳转链接时,会自动去尝试匹配所有的 正常情况下,只需匹配到一个规则,渲染即可,即匹配成功一个后,无需进行后续的匹配尝试,此时可以用 import { BrowserRouter as Router, Route, NavLink, Switch, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <NavLink to="/home" className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <Switch> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> <Route path="/home" component={Home}/> <Route path="/home" component={Home}/> {/* 此处省略一万个Route组件 */} <Route path="/home" component={Home}/> </Switch> </Router> </div> ); } export default App; 效果如下: 要点总结: 将多个 重定向当页面跳转时,若跳转链接没有匹配上任何一个 import { BrowserRouter as Router, Route, NavLink, Switch, Redirect, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <NavLink to="/home" className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <NavLink to="/shop" className="link">跳转Shop页面</NavLink> {/* 点击,跳转到/shop,但该路径没有设置 */} <Switch> <Route path="/home" component={Home}/> <Route path="/about" component={About}/> <Redirect to="/home" /> {/* 当以上Route组件都匹配失败时,重定向到/home */} </Switch> </Router> </div> ); } export default App; 效果如下: 路由传参所有路由传递的参数,都会在跳转路由组件的 路由传参的方式一共有三种,依次来看一下 第一种 第一种是在 import { BrowserRouter as Router, Route, NavLink, Switch, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> {/* 在 /home 的路径上携带了 张三、18 共两个参数 */} <NavLink to="/home/张三/18" className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <Switch> {/* 在 /home 匹配路径上相同的位置接收了 name、age 两个参数 */} <Route path="/home/:name/:age" component={Home}/> <Route path="/about" component={About}/> </Switch> </Router> </div> ); } export default App; 尝试跳转,并打印一下路由组件的 可以看到,第一种方式的参数是通过 第二种 第二种方式就是通过在 import { BrowserRouter as Router, Route, NavLink, Switch, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> {/* 在跳转路径后面以?开头传递两个参数,分别为name=张三、age=18 */} <NavLink to="/home?name=张三&age=18" className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <Switch> {/* 此处无需做接收操作 */} <Route path="/home" component={Home}/> <Route path="/about" component={About}/> </Switch> </Router> </div> ); } export default App; 尝试跳转,并打印一下路由组件的 可以看到,第二种方式的参数是通过 第三种 第三种方式就是以对象的形式编写 import { BrowserRouter as Router, Route, NavLink, Switch, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> {/* 以对象的形式描述to属性,路径属性名为pathname,参数属性名为state */} <NavLink to={{pathname: "/home", state: {name: '张三', age: 18}}} className="link">跳转Home页面</NavLink> <NavLink to="/about" className="link">跳转About页面</NavLink> <Switch> {/* 此处无需特地接收属性 */} <Route path="/home" component={Home}/> <Route path="/about" component={About}/> </Switch> </Router> </div> ); } export default App; 尝试跳转,并打印一下路由组件的 可以看到,第三种方式的参数是通过 函数式路由 以上主要都是通过 但有时,我们需要更灵活的方式进行跳转路由,例如通过调用一个函数,随时随地进行路由跳转,这就叫函数式路由 函数式路由用到的方法有以下
push
举个例子:在路由组件 import React from 'react' function Home (props) { let pushLink = () => { props.history.push('/about') } return ( <div className="a"> 我是Home页面 <button onClick={pushLink}>跳转到about页面</button> </div> ) } export default Home 跳转效果如下: 可以看到,通过 replace
改动一下代码 import React from 'react' function Home (props) { let replaceLink = () => { props.history.replace('/about') } return ( <div className="a"> 我是Home页面 <button onClick={replaceLink}>跳转到about页面</button> </div> ) } export default Home 跳转效果如下: 可以看到,刚开始的路径是 ‘/' ,然后跳转到 ‘/home' ,再点击按钮,通过 goForward 调用 这里就不做过多演示了 goBack 调用 go
该方法接受一个参数(参数类型为
普通组件使用路由这里区分两个概念,分别为 普通组件 和 路由组件 通过 例如,下方代码中: import { BrowserRouter as Router, Route, NavLink, Switch, } from 'react-router-dom' import Home from './home' export default function App() { return ( <div className="App"> <Router> <NavLink to='/home' className="link">跳转Home页面</NavLink> <Switch> <Route path="/home" component={Home}/> </Switch> </Router> </div> ); } 然后,路由组件跟普通组件最大的区别就是,组件的 此时, 使用方法如下: import { BrowserRouter as Router, Route, NavLink, Switch, withRouter, // 1. 引入 witRouter } from 'react-router-dom' import About from './about' function App(props) { console.log(props); // 3. 尝试打印普通组件App的props,发现此时props中已有内容了,即普通组件也能拥有跟路由组件一样类似的功能 return ( <div className="App"> <Router> <NavLink to="/about" className="link">跳转About页面</NavLink> <Switch> <Route path="/about" component={About}/> </Switch> </Router> </div> ); } export default withRouter(App); // 2. 通过withRouter方法对普通组件做一层包装处理 补充replace 在函数式路由里跳转类型主要有两种,分别是 import { BrowserRouter as Router, Route, Link } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <Link to="/home" className="link">跳转Home页面</Link> <Link to="/about" className="link">跳转About页面</Link> <Route path="/home" component={Home} replace={true}/> {/* replace为true,跳转类型为replace */} <Route path="/about" component={About} replace={false}/> {/* replace为false,跳转类型为push */} </Router> </div> ); } export default App; Route` 组件上有个 `replace` 属性可以设定跳转类型,当值为 `true` 时,跳转类型为 `replace` ; 为 `false` 时,跳转类型为 `push excat 路由的匹配默认是模糊匹配的,举个例子: import { BrowserRouter as Router, Route, Link, } from 'react-router-dom' import Home from './home' import About from './about' function App() { return ( <div className="App"> <Router> <Link to="/home/abc">跳转Home页面</Link> {/* 跳转到/home/abc,但实际home下没有abc这个路由组件 */} <Link to="/about/abc">跳转About页面</Link> {/* 跳转到/about/abc,但实际home下也没有abc这个路由组件 */} <Route path="/home" component={Home} /> {/* 路由匹配规则为/home,没有设置exact属性,当前为模糊匹配 */} <Route path="/about" component={About} exact/> {/* 路由匹配规则为/about,设置了exact属性,当前为精准匹配 */} </Router> </div> ); } export default App; 效果如下: 图中看出,因为跳转 总结:
以上就是无废话快速上手React路由的详细内容,更多关于React路由快速上手的资料请关注极客世界其它相关文章! |
请发表评论