(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 常用规范和经验相关推荐

  1. AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)

    AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录

  2. 精益 React 学习指南 (Lean React)- 4.1 react 代码规范

    书籍完整目录 4.1 react 代码规范 关于 基础规范 组件结构 命名规范 jsx 书写规范 eslint-plugin-react 关于 在代码的设计上,每个团队可能都有一定的代码规范和模式,好 ...

  3. # 后端开发技巧、常用规范

    后端开发技巧.常用规范 开发技巧 equals() 方法的使用 null.equals()会出报空指针,因该是非null的值.equals() 可以使用Objects的equals()方法避免空值,完 ...

  4. react常用生命周期流程图

    简述 本文将常用的react生命周期绘制成了一张流程图,便于理解和记忆; react中每个组件都包含"生命周期方法",我们可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法 ...

  5. react textarea 空格为什么不换行_你需要的 React + TypeScript 50 条规范和经验

    这篇文章没有对错之分,肯定也有不完善的地方,结合了自己日常开发和经验.可以让你书写代码更具严谨性,希望看完之后有所帮助.本文字数4000+ ,看完本文大概需半小时. 1. 注释 (1) 文件顶部的注释 ...

  6. 【Python】数理统计理论:常用统计量、经验分布函数

    一.常用统计量 数理统计学中常用的统计量有:样本均值.样本方差.顺序统计量.中位数.众数等. 其中可以反映总体位置特征的有数据的中心位置是均值(Mean),中位数(Median),众数(Mode).其 ...

  7. react常用ui组件库

    前端常用组件库 移动端和pc端适配:react+chakre-ui组件库+recoil状态管理+react-router-dom+typescript https://chakra-ui.com/do ...

  8. 设计html网页时需要遵循的语言规范,CSS设计网页时的一些常用规范

    1CSS命名规范 CSS命名规范 一.文件命名规范 全局样式:global.css: 框架布局:layout.css: 字体样式:font.css: 链接样式:link.css: 打印样式:print ...

  9. 性能优化常用工具及经验总结

    文 |齐光 性能问题和 Bug 不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些. 对应用进行性能优化 ...

最新文章

  1. Vue.js全家桶高还原网易云音乐(Windows PC版)
  2. Ionic实战 自动升级APP(Android版)
  3. matlab随机数生成
  4. php 匹配标记,php – 正则表达式匹配没有标记的链接
  5. 威学一百_精彩回顾深圳威学一百低龄校区圣诞活动精彩回顾!
  6. 通过Rman定期删除归档脚本
  7. QT乱码总结0.Qt乱码产生因素
  8. 计算机组成说明,计算机组成与系统结构考试说明.ppt
  9. Delphi面向对象的可见性表示符
  10. php日程 增删改查,使用Fullcalendar管理日程事件(增删改查拖放)
  11. python中循环结构_python中的循环结构等相关知识
  12. 作为开发你必须知道的WebSocket详解
  13. PuttyPsftp
  14. EINT、DINT、ERTM、DRTM和INTM、DBGM解析
  15. 明大推荐系统导论笔记 week 2
  16. 微信支付实战(完整的代码,复制即可用)
  17. 从抓取豆瓣电影聊高性能爬虫思路(纯干货)
  18. 洛谷【P1873】 砍树 简单二分解析
  19. 连连看修改(golang)
  20. 2019,苹果的未来去向何方?

热门文章

  1. 详解log4j2(下) - Log4j2在WEB项目中配置
  2. 画像的基础、原理、方法论(模型)和应用
  3. 浅谈数组常见遍历方法
  4. input ios问题
  5. linux - 虚拟机的自动安装与dhcp
  6. spring4.0之二:@Configuration的使用
  7. Linux 下查看某一个程序所使用的内存方法介绍
  8. WCF中绑定的简单介绍
  9. MySQL-8.0.12-winx64
  10. PHP 入门 - 2.函数