前端模块化开发--React框架(三):应用进阶(react-router4&&antd框架)
时间:2022-07-25
本文章向大家介绍前端模块化开发--React框架(三):应用进阶(react-router4&&antd框架),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、react-router4
1、react-router4理解
- 1) react的一个插件库
- 2) 专门用来实现一个SPA应用
- 3) 基于react的项目基本都会用到此库
2、SPA的理解
- 1) 单页Web应用(single page web application,SPA
- 2) 整个应用只有一个完整的页面
- 3) 点击页面中的链接不会刷新页面, 本身也不会向服务器发请求
- 4) 当点击路由链接时, 只会做页面的局部更新
- 5) 数据都需要通过ajax请求获取, 并在前端异步展现
3、路由的理解
- 1) 什么是路由?
Code
- a.一个路由就是一个映射关系(key:value)
- b.key为路由路径, value可能是function/component
- 2) 路由分类
Code
- a.后台路由: node服务器端路由, value是function, 用来处理客户端提交的请求并返回一个响应数据
- b.前台路由: 浏览器端路由, value是component, 当请求的是路由path时, 浏览器端前没有发送http请求, 但界面会更新显示对应的组件
- 3) 后台路由
Code
- a.注册路由: router.get(path, function(req, res))
- b.当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据
- 4) 前端路由
Code
- a.注册路由: <Route path="/about" component={About}>
- b.当浏览器的hash变为#about时, 当前路由组件就会变为About组件
4、前端路由
history库
Code
a.网址: https://github.com/ReactTraining/history
b.管理浏览器会话历史(history)的工具库
c.包装的是原生BOM中window.history和window.location.hash
代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>history test</title>
</head>
<body>
<p><input type="text"></p>
<a href="/test1" onclick="return push('/test1')">test1</a><br><br>
<button onClick="push('/test2')">push test2</button><br><br>
<button onClick="back()">回退</button><br><br>
<button onClick="forword()">前进</button><br><br>
<button onClick="replace('/test3')">replace test3</button><br><br>
<script type="text/javascript" src="https://cdn.bootcss.com/history/4.7.2/history.js"></script>
<script type="text/javascript">
let history = History.createBrowserHistory() // 方式一、a.得到封装window.history的管理对象
// history = History.createHashHistory() // 方式二、得到封装window.location.hash的管理对象
// console.log(history)
function push (to) {
//添加一个新的历史记录
history.push(to)
return false
}
function back() {
//回退到上一个历史记录
history.goBack()
}
function forword() {
//前进到下一个历史记录
history.goForward()
}
function replace (to) {
//用一个新的历史记录替换当前的记录
history.replace(to)
}
//监视历史记录的变化
history.listen((location) => {
console.log('请求路由路径变化了', location)
})
</script>
</body>
</html>
5、react-router相关API
组件
Code
1)<BrowserRouter>
2)<HashRouter>
3)<Route>
4)<Redirect>
5)<Link>
6)<NavLink>
7)<Switch>
//其它
1)history对象
2)match对象
3)withRouter函数
6、使用
引用
Code
//下载版本4的,如果不指定会下载最新的5版本
npm install --save react-router-dom@4
javascript
render() {
return(
<div>
<h2>home router component</h2>
<div>
<ul className='nav nav-tabs'>
<li>
<MyNavLink to='/home/news'>News</MyNavLink>
</li>
<li>
<MyNavLink to='/home/message'>Message</MyNavLink>
</li>
</ul>
<div>
<Switch>
<Route path='/home/news' component={News}/>
<Route path='/home/message' component={Message}/>
<Redirect to='/home/news'/>
</Switch>
</div>
</div>
</div>
)
7、向路由组件传递数据
路由设置
javascript
<div>
<ul>
{
this.state.messages.map((message, index) => (
<li key={index}>
{/*<a href={`/home/message/detail/${message.id}`}>{message.title}</a>*/}
<MyNavLink to={`/home/message/detail/${message.id}`}>{message.title}</MyNavLink>
<button className='btn btn-info' onClick={() => this.showDetailByPush(message.id)}>查看</button>
<button className='btn btn-danger' onClick={() => this.showDetailByReplace(message.id)}>查看</button>
</li>
))
}
</ul>
<Route path='/home/message/detail/:id' component={MsgDetail}/>
</div>
接收数据
javascript
render() {
//获取上面id的数值
const {id} = this.props.match.params
console.log('id:' + id)
const message = this.state.msg_detail.find((m) => m.id === id * 1)
console.log(message)
return (
<div>
<ul>
<li>ID:{message.id}</li>
<li>TITLE:{message.title}</li>
<li>CONTENT:{message.content}</li>
</ul>
</div>
)
}
8、props里面的几个方法
javascript
showDetailByPush = (id) => {
//在原来的基础上添加
this.props.history.push(`/home/message/detail/${id}`)
}
showDetailByReplace = (id) => {
//删除原来的之后再添加
this.props.history.replace(`/home/message/detail/${id}`)
}
back = () => {
//返回
this.props.history.goBack()
}
forward = () => {
//前进,下一个
this.props.history.goForward()
}
二、ant design前端UI框架
官网地址
蚂蚁金服的前端UI框架,基于react实现的,详情看官方文档
- SQL学习之Insert的特殊用法(插入检索出的数据,表之间的数据复制)
- 对php多态的理解
- JavaScript值延迟脚本和异步脚本
- JavaScript之arguments.callee
- JavaScript之面向对象学九(原型式继承和寄生式继承)
- ExtJs学习笔记(18)_ExtJs嵌入FCK示例
- Html与CSS快速入门01-基础概念
- 利用Fck的javascript-API创建fck编辑器
- ASPNET_WEBAPI快速学习02
- ExtJs学习笔记(17)_table布局
- Markdown快速入门
- JavaScript之apply()和call()的区别
- JavaScript之面向对象学习八(继承)
- JQuery快速入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈CentOS防火墙命令
- 【Vue.js】Vue.js组件库Element中的下拉菜单、步骤条、对话框和文字提示
- Win10触控板多指触控、手势操作教程
- 【Vue.js】Vue.js组件库Element中的弹出框、气泡确认框、卡片和走马灯
- 【Vue.js】Vue.js组件库Element中的折叠面板、时间线、分割线和日历
- 从Properties乱码来学习编码
- 【Vue.js】Vue.js组件库Element中的图片、回到顶部、无限滚动和抽屉
- Java逐行读取和写入文件
- Vuejs使用v-for指令实现九九乘法表
- Cypress系列(43)- visit() 命令详解
- 在GitLab pages上快速搭建Jekyll博客
- Dubbo项目中No provider available for the service xxx from registry xxx on the consumer问题的解决思路
- Mysql面对高并发修改的问题处理【2】
- java (多网卡环境下)发送组播广播(multicast/broadcast)失败问题
- activmq:android平台下使用openwire协议连接activemq服务的问题