当后端人员未提供接口,前端人员该怎么测试 --mock
1、回顾
2、线上的mock
3、线上接口文档 Swagger
4、react 文档
React 是一个用于构建用户界面的 JavaScript 库
4.1 元素、组件
const element = <h1>Hello, world!</h1>;
// 既不是字符串也不是 HTML。被称为 JSX,是一个 JavaScript 的语法扩展
JSX 可以生成 React “元素”。
react的关注点分离:React 并没有采用将标记与逻辑进行分离到不同文件这种人为地分离方式,而是通过将二者共同存放在称之为“组件”的松散耦合单元之中,来实现关注点分离。
- React 不强制要求使用 JSX,也可以使用函数
// jsx
const App = (
<div className="test">
hello jsx
</div>
)
// 函数
const App = React.createElement('div', {className: 'test'}, 'hello jsx')
// 注意:这是简化过的结构
const element = {
type: 'div',
props: {
className: 'test',
children: 'hello jsx'
}
};
- React DOM 在渲染所有输入内容之前,默认会进行转义。它可以确保在你的应用中,永远不会注入那些并非自己明确编写的内容。所有的内容在渲染之前都被转换成了字符串。这样可以有效地防止 XSS(cross-site-scripting, 跨站脚本)攻击。
4.2 元素渲染
元素是构成 React 应用的最小砖块
组件是由元素构成的
React 只更新它需要更新的部分 --- react内部含有diff算法,采用的虚拟DOM
组件(类组件、函数式组件), 元素就是一个变量,它的值为一段HTML代码
4.3 组件与props
组件名称必须以大写字母开头。组件可以嵌套使用。组件并不是拆分的越小越好,而是越合理越好
Props 的只读性
所有 React 组件都必须像纯函数一样保护它们的 props 不被更改。
组件内部可以用状态,组件之间用props
4.4 状态
使用类组件可以设置初始化的数据(状态),函数式组件不能设置状态
State 与 props 类似,但是 state 是私有的,并且完全受控于当前组件。
4.5 生命周期
初始化阶段
运行时阶段
销毁阶段
异常处理
4.6 事件处理
React 元素的事件处理和 DOM 元素的很相似,但是有一点语法上的不同:
React 事件的命名采用小驼峰式(camelCase),而不是纯小写。 onClick onChange
使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。
在 React 中另一个不同点是你不能通过返回 false 的方式阻止默认行为。
4.7 条件渲染
jsx 不 if,jsx可 与、或、三目
if 可 JSX
- 阻断渲染
render () {
if (!flag) {
return false; // return null;
}
}
4.8 列表&key
jsx 不 for, 可 map
for中可jsx
列表必加key, key为变化的标识,没有变复用
遍历谁 谁加key
key 只是在兄弟节点之间必须唯一
render () {
return (
{
this.state.isLoading ? <Loading /> : this.state.prolist.map(item => ())
}
)
}
4.9 表单
- 受控组件
使 React 的 state 为“唯一数据源”。渲染表单的 React 组件控制着用户输入过程中表单发生的操作。控制取值的表单输入元素就叫做“受控组件”。
通过事件对象event获取值,调用setState更改值,value为表单的值,表单的值为自己组件的状态
handler (event) {
this.setState({
username: event.currentTarget.value
})
}
render () {
return (
<div>
<input type="text" value={ this.state.username } onChange = { this.handler.bind(this)}>
</div>
)
}
验证、追踪访问字段以及处理表单提交的完整解决方案: https://jaredpalmer.com/formik
- 非受控组件
原文地址:https://www.cnblogs.com/hy96/p/11925992.html
- 产品解析:Github Atom
- Docker+Jenkins持续集成环境(5): android构建与apk发布
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
- 易企秀前端压缩源码分析与还原
- 关于 JS 拖拽功能的冲突问题及解决方法
- 使用 SVG 和 JS 创建一个由星形变心形的动画
- 如何使用 Bootstrap 搭建更合理的 HTML 结构
- Java遍历Map对象的四种方式
- java 线程public void run()中值如何返回
- Jackson与spring框架整合的坑
- spring shiro整合时自动注入的问题
- mybatis获取update的id
- 点击!AWD攻防解题技巧在此!
- Docker 基础技术之 Linux namespace 详解
- 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 数组属性和方法
- 已拿Offer!百度、字节跳动等后台面经
- Python Networkx基础知识及使用总结
- AkShare-沪深港通持股-个股排行
- Python SQLite常见异常及解决办法
- IPC—进程间通信的基础概念
- Python Django开发 经验技巧总结(一)
- Python SQLite 基本操作和经验技巧(二)
- AkShare-股票数据-主要股东
- 进程间通信的方式(1)
- Python Django开发 经验技巧总结(二)
- 进程间通信的方式(2)
- AkShare-股票数据-机构持股
- View的滑动方式 详细介绍
- AkShare-期货数据-分时数据
- Python 爬取留言板留言(三):多进程版+selenium模拟