理想是火,点燃熄灭的灯。
$ npm i react-router-dom --save
import {BrowserRouter as Router,Route,Link} from 'react-router-dom'
声明路由组件 一个func 相当于是一个路由组件
这里是无状态路由的写法 实际工作中会把路由组件单独的写成一个js来进行引入
function Index (){ return <h2>Jspang.com</h2> } function List (){ return <h2>List-page</h2> }
function AppRouter (){ return( <Router> <ul> {/* Link 为路由的跳转 类似于a标签 */} <li><Link to='/'>首页</Link></li> </ul> {/* exact 为精准定位 必须为/ 才能进行匹配 Route 为路径的指引 component 为上面绑定的组件 path 为路径 */} <Route path="/" exact component = {Index} /> {/* :id 设置规则 不传不跳转 */} <Route path="/list/:id" component = {List} /> <Route path="/home/" component = {Home} /> </Router> ) } // 暴露出去 export default AppRouter;
<Route path="/list/:id" component = {List} />
在生命周期中接收 路由传递的值
componentDidMount(){ let ReadID = this.props.match.params.id console.log(ReadID) }
import {Link,Redirect } from 'react-router-dom' 编程式重定向 this.props.history.push('/home/') 标签重定向 在render最外层标签中写入 <Redirect to="/home/" />
模拟一组数据
let routeConfig =[ {path:'/',title:'博客首页',exact:true,component:Index}, {path:'/video/',title:'视频教程',exact:false,component:Video}, {path:'/work/',title:'职场技能',exact:false,component:Work} ] return( <Router> <div className="mainDiv"> <div className="leftNav"> <h3>一级导航</h3> <ul> { routeConfig.map((item,index)=>{ return ( <li key={index}> <Link to={item.path}>{item.title}</Link> </li> ) }) } </ul> </div> </div> <div className="rightMain"> { routeConfig.map((item,index)=>{ return ( <Route path={item.path} exact={item.exact} component={item.component} /> ) }) } </div> </Router>
1.通过Link标签跳转,在上面已经有过相关说明
2.在页面中,可以通过WithRouter 来跳转
示例:
import { withRouter } from "react-router-dom"; class Home extends Component{ <button onClick={this.goForward}>下一级</button> goForward = () => { this.props.history.goForward() //函数式路由 {/* this.props.history.go(0) //正数表示调用几次goForward,负数表示调用几次goBack(),0表示刷新当前页面; this.props.history.goBack() //返回上一级 this.props.history.push('/home') //到哪去 this.props.history.replace() //替换当前路径 历史记录不再会有替换之前的路径 */} } } export default withRouter(Home)
3.在组件中,前提是使用redux和
前置条件 使用了redux-thunk和connected-react-router
1. import { connect } from "react-redux"; import { push } from "connected-react-router"; 2. export default connect(mapStoreStateToProps)(Nav); 3. linkTo = (route) => { console.log(route); this.props.dispatch(push(route.path)); };
4.在redux中进行跳转:
方法同3
5.在JS文件中(axios拦截器中,路由跳转)
import { push } from "connected-react-router"; import store from "../../store/index"; //初始化redux创建需要用它的dispatch store.dispatch(push("/Route2"));
package.json参考:
{ "name": "combine", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", "@testing-library/user-event": "^7.2.1", "axios": "^0.20.0", "connected-react-router": "^6.8.0", "history": "^4.10.1", "react": "^16.13.1", "react-dom": "^16.13.1", "react-redux": "^7.2.1", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "3.4.1", "redux": "^4.0.5", "redux-thunk": "^2.3.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }
作者: Bill 本文地址: http://biaoblog.cn/info?id=1573027260000
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇:ReactHooks学习记录
下一篇:Video.js使用指南