react 常用规范和经验
(1)业务代码里面的异步请求需要 try catch
ajax 请求,使用 try catch,错误提示后端返回,并且做一些失败后的状态操作例如进入列表页,我们需要一个 loading 状态,然后去请求数据,可是失败之后,也需要把 loading 状态去掉,把 loading 隐藏的代码就写在 finally 里面。
getStudentList = async () => {try {this.setState({loading: true,isEmpty: false});await getStudentList({});this.setState({loading: false,isEmpty: true});} catch (e) {// TODOconsole.log(e)} finally {// 失败之后的一些兜底操作this.setState({loading: false,isEmpty: true});}
};
(2) for-in 中一定要有 hasOwnProperty 的判断(即禁止直接读取原型对象的属性)
//bad
const arr = [];
const key = '';for (key in obj) {arr.push(obj[key]);
}//good
const arr = [];
const key = '';for (key in obj) {if (obj.hasOwnProperty(key)) {arr.push(obj[key]);}
}
(3)第三方库函数的使用
用 try catch 包裹,防止第三方库的出现错误,导致整个程序崩溃/** Echart 用于代绘制图表,但当其自身发生错误时,可能影响到业务代码的执行*/
// bad
const iniDom = document.getElementById('init-container');
const echartObj = echarts.init(iniDom);
this.setState({echartObj},() => {const { echartObj } = this.state;// 更新图表echartObj.setOption(CHART_CONFIG, true);}
);// good
try {const iniDom = document.getElementById('init-container');const echartObj = echarts.init(iniDom);this.setState({echartObj},() => {const { echartObj } = this.state;// 更新图表echartObj.setOption(CHART_CONFIG, true);});
} catch (error) {// TODO
}
(4)防止 xss 攻击
input,textarea 等标签,不要直接把 html 文本直接渲染在页面上,使用 xssb 等过滤之后再输出到标签上;
import { html2text } from 'xss';
render(){<divdangerouslySetInnerHTML={{__html: html2text(htmlContent)}}
/>
}
(5)在组件中获取真实 dom
使用 16 版本后的 createRef()函数
class MyComponent extends React.Component<iProps, iState> {constructor(props) {super(props);this.inputRef = React.createRef();}render() {return <input type="text" ref={this.inputRef} />;}componentDidMount() {this.inputRef.current.focus();}
}
(6)代码细粒度的思考
总结四句话。我们在写组件或者函数的的时候,
- 工具函数和业务逻辑抽离;
- 表单校验和业务抽离;
- 事件函数和业务抽离;
- ajax和业务抽离;
例如有些页面是通过location.href跳转的,我们有些业务逻辑等都是放到didmountMount,但是后期改需求,可能要用react-router进行跳转,可能要改的逻辑就会很多了,所以函数抽离出来,需求更新就少改一点代码。
如果还不确定如何划分函数的细粒度,我有个建议。使用过两次以上的代码,要抽离组件或者函数,两次的可以不用
(7)a标签安全问题
使用a标签打开一个新窗口过程中的安全问题。新页面中可以使用window.opener来控制原始页面。如果新老页面同域,那么在新页面中可以任意操作原始页面。如果是不同域,新页面中依然可以通过window.opener.location,访问到原始页面的location对象
在带有target="_blank"的a标签中,加上rel="noopener"属性。如果使用window.open的方式打开页面,将opener对象置为空。
var newWindow = window.open();
newWindow.opener = null;
react 常用规范和经验相关推荐
- AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)
AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录
- 精益 React 学习指南 (Lean React)- 4.1 react 代码规范
书籍完整目录 4.1 react 代码规范 关于 基础规范 组件结构 命名规范 jsx 书写规范 eslint-plugin-react 关于 在代码的设计上,每个团队可能都有一定的代码规范和模式,好 ...
- # 后端开发技巧、常用规范
后端开发技巧.常用规范 开发技巧 equals() 方法的使用 null.equals()会出报空指针,因该是非null的值.equals() 可以使用Objects的equals()方法避免空值,完 ...
- react常用生命周期流程图
简述 本文将常用的react生命周期绘制成了一张流程图,便于理解和记忆; react中每个组件都包含"生命周期方法",我们可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法 ...
- react textarea 空格为什么不换行_你需要的 React + TypeScript 50 条规范和经验
这篇文章没有对错之分,肯定也有不完善的地方,结合了自己日常开发和经验.可以让你书写代码更具严谨性,希望看完之后有所帮助.本文字数4000+ ,看完本文大概需半小时. 1. 注释 (1) 文件顶部的注释 ...
- 【Python】数理统计理论:常用统计量、经验分布函数
一.常用统计量 数理统计学中常用的统计量有:样本均值.样本方差.顺序统计量.中位数.众数等. 其中可以反映总体位置特征的有数据的中心位置是均值(Mean),中位数(Median),众数(Mode).其 ...
- react常用ui组件库
前端常用组件库 移动端和pc端适配:react+chakre-ui组件库+recoil状态管理+react-router-dom+typescript https://chakra-ui.com/do ...
- 设计html网页时需要遵循的语言规范,CSS设计网页时的一些常用规范
1CSS命名规范 CSS命名规范 一.文件命名规范 全局样式:global.css: 框架布局:layout.css: 字体样式:font.css: 链接样式:link.css: 打印样式:print ...
- 性能优化常用工具及经验总结
文 |齐光 性能问题和 Bug 不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些. 对应用进行性能优化 ...
最新文章
- Vue.js全家桶高还原网易云音乐(Windows PC版)
- Ionic实战 自动升级APP(Android版)
- matlab随机数生成
- php 匹配标记,php – 正则表达式匹配没有标记的链接
- 威学一百_精彩回顾深圳威学一百低龄校区圣诞活动精彩回顾!
- 通过Rman定期删除归档脚本
- QT乱码总结0.Qt乱码产生因素
- 计算机组成说明,计算机组成与系统结构考试说明.ppt
- Delphi面向对象的可见性表示符
- php日程 增删改查,使用Fullcalendar管理日程事件(增删改查拖放)
- python中循环结构_python中的循环结构等相关知识
- 作为开发你必须知道的WebSocket详解
- PuttyPsftp
- EINT、DINT、ERTM、DRTM和INTM、DBGM解析
- 明大推荐系统导论笔记 week 2
- 微信支付实战(完整的代码,复制即可用)
- 从抓取豆瓣电影聊高性能爬虫思路(纯干货)
- 洛谷【P1873】 砍树 简单二分解析
- 连连看修改(golang)
- 2019,苹果的未来去向何方?