您现在的位置是:网站首页> 编程资料编程资料
react实现移动端二级路由嵌套详解_React_
2023-05-24
361人已围观
简介 react实现移动端二级路由嵌套详解_React_
页面效果展示


功能需求
根据下面不同的标题切换不同的页面,请求接口数据,渲染页面数据,点击左侧数据,进入详情页面,在右侧图片中点击返回返回左面页面
实现代码
我们用到了react中的router,首先我们要下载react的路由,命令是
react-router-dom@5 --save
路由5版本跟6版本使用语法上略有区别,现在使用较多的是5版本
我们首先在index.js文件中引入react路由,然后进行路由跳转
import { default as React } from 'react'; import ReactDOM from 'react-dom/client'; import { HashRouter, Route, Switch } from 'react-router-dom'; import App from './App'; import Detail from './Component/Detail'; import './index.css'; import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); export default function Routers() { return ( ) } root.render( ); reportWebVitals();这样默认打开的就是我们的app组件,一定要使用Switch包裹,否则他就是路由模糊匹配,如果是模糊匹配,他可能会把router路由全部渲染到页面,使用Switch他会从上往下匹配,匹配到一个路由地址以后就不在继续执行了
app.js组件
import React, { Component } from 'react'; import { NavLink, Route } from 'react-router-dom'; import './App.css'; import Article from './Component/Article'; import Cart from './Component/Cart'; import Detail from './Component/Detail'; import Home from './Component/Home'; import My from './Component/My'; export default class App extends Component { render() { return ( {/* 定义二级路由的地址 */} {/* 底部导航栏 */} ) } }app.js组件中有四个子路由,声明式-视图导航 NavLink Link NavLink是Link的包装,NavLink activeStyle 高亮内置样式 activeClassname设置高亮class类
Article.js
import axios from 'axios'; import React, { Component } from 'react'; export default class Article extends Component { constructor() { super(); this.state = { list:[], } this.getList(); } goDetail = (id)=>{ this.props.history.push("/detail/"+id); } //定义获取文章列表的方法 getList = async ()=>{ let {data} = await axios.get("https://api.it120.cc/small4/cms/news/list"); console.log(data); this.setState({ list:data.data, }) } render() { let {list} = this.state; return ( { list.map((item, index) => { return (
this.goDetail(item.id)}/>{item.title} ) }) } ) } }在这点击图片跳转到详情页面Detail.js文件
Detail.js
import axios from "axios"; import React, { Component } from 'react'; import NavBar from "./NavBar"; export default class Detail extends Component { constructor(props){ super(props) this.state = { info:{}, } this.getInfo(); } getInfo = async ()=>{ let {id} = this.props.match.params; console.log(id); let {data} = await axios.get("https://api.it120.cc/small4/cms/news/detail?id="+id); console.log(data); this.setState({ info:data.data, }) } render() { let {info} = this.state; return ( {info.title}
) } }在这个组件中我们封装了一个子组件,里面有一个返回按钮
import React, { Component } from 'react'; import { withRouter } from 'react-router-dom'; class NavBar extends Component { constructor(props){ super(props) console.log(this.props); } render() { return ( this.props.history.goBack()}>返回 ) } } export default withRouter(NavBar)不是所有组件都直接与路由相连(比如拆分的子组件)的,当这些组件需要路由参数时,使用withRouter就可以给此组件传入路由参数,将react-router的history、location、match三个对象传入props对象上,此时就可以使用this.props。
到此这篇关于react实现移动端二级路由嵌套详解的文章就介绍到这了,更多相关react二级路由嵌套内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- elementui+vue+axios实现文件上传本地服务器_vue.js_
- 可能是vue中使用axios最详细教程_vue.js_
- vue开发移动端h5环境搭建的全过程_vue.js_
- node.js连接mongoose数据库方法详解_node.js_
- Vue+Axios实现文件上传自定义进度条_vue.js_
- vue3.0引入百度地图并标记点的实现代码_vue.js_
- Vue+elementUI实现动态展示列表的数据_vue.js_
- Vue业务组件封装Table表格示例详解_vue.js_
- vue.js 实现点击div标签时改变样式_vue.js_
- vue封装动态表格方式详解_vue.js_
