博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端小知识10点(2019.4.14)
阅读量:6146 次
发布时间:2019-06-21

本文共 2708 字,大约阅读时间需要 9 分钟。

1、React.PureComponent 与 React.Component 的区别

React.PureComponent 与 React.Component 几乎完全相同,但 React.PureComponent 通过 prop 和 state 的浅对比来实现 shouldComponentUpate()
React.Component:

class A extends React.Component{
  //xxx } 复制代码

React.PureComponent:

class B extends React.PureComponent{
  //xxx } 复制代码

注意:如果 props 和 state 包含复杂的数据结构,React.PureComponent 可能会因深层数据不一致而产生错误的否定判断,即 state、props 深层的数据已经改变,但是视图没有更新。

2、shouldComponentUpate() 的机制

只要 state、props 的状态发生改变,就会 re-render,即使 state、props 的值和之前一样

有三种办法优化 shouldComponentUpate 生命周期

(1)只用简单的 props 和 state 时,考虑 PureComponent (理由如 第 1 点)
(2)当开发者知道 深层的数据结构 已经发生改变时使用 forceUpate()
(3)使用 不可变对象(如 Immutable.js) 来促进嵌套数据的快速比较

3、React 强制更新状态之 forceUpdate()

我们都知道,当 state、props 状态改变时,React 会重渲染组件。

但如果你不用 props、state,而是其他数据,并且在该数据变化时,需要更新组件的话,就可以调用 forceUpdate(),来强制渲染

举个例子:

class A extends Component {
  this.a=1   Add(){
    this.a+=1     this.forceUpdate()   }    //调用Add() ... } 复制代码

流程:当调用 forceUpdate() 方法后

注意:

(1)如果改变标签的话,React 仅会更新 DOM。
(2)render() 函数中最好从 this.props 和 this.state 读取数据,forceUpdate() 仅在“宝贵”的时刻用。

4、服务端渲染

ReactDOM.render() 将在 React.v17废弃,改成 ReactDOM.hydrate()

5、ReactDOM.unmountComponentAtNode(container)

这个方法会从 DOM 中删除已经挂载的 React component 并且清理上面 注册的事件 和 状态,如果 container 中没有挂载 component,则调用此函数不执行任何操作。

返回 true 或 false

6、babel-plugin-transform-remove-console

在打包React项目后,清除所有console.log()语句

7、antd 的 Modal 去掉 onCancel 后,点击遮罩层或右上角叉,不会关闭 模态框

 
复制代码

8、利用 ref 实现<div>滚动到最下方

class A extends Component {
  constructor(props){
     //xxx     this.aa = React.createRef();   }   render() {
    if(this.aa&&this.aa.current){
      this.aa.current.scrollTop = this.aa.current.scrollHeight     }     return (       
        //100个一定高度的div       
  )} } 复制代码

9、ESLint Unexpected use of isNaN:错误使用isNaN

// bad isNaN('1.2'); // false isNaN('1.2.3'); // true // good Number.isNaN('1.2.3'); // false Number.isNaN(Number('1.2.3')); // true 复制代码

10、Assignment to property of function parameter 'item' :循环时,不能添加/删除对象属性

let obj=[{
a:1,b:2},{
c:3,d:4}] //bad obj.map((item, index) => {
      //添加Index属性           item.index = index + 1;   }); //good 复制代码
      columnsData.forEach((item, index) => {
        // 添加序号         item.index = index + 1;       }); 复制代码

11、error Use array destructuring:使用数组结构来赋值

//bad newTime = array[0]; //good [newTime] = array; 复制代码

12、error Use object destructuring:使用对象结构来赋值

//bad const clientWidth = document.body.clientWidth; //good const {
body:{clientWidth}} = document; 复制代码

13、Require Radix Parameter (radix):缺少参数

//bad parseInt(numberOne); //good parseInt(numberOne,10); 复制代码

14、禁止浏览器双击选中文字

.aa{
  //浏览器双击选不到文字   -webkit-user-select: none; } 复制代码

(完)

转载地址:http://ifxya.baihongyu.com/

你可能感兴趣的文章
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
「一本通 1.1 例 1」活动安排
查看>>
input autocomplete用法
查看>>
C语言学习笔记之数组(Arrays)
查看>>
Head First 设计模式 (Eric Freeman / Elisabeth Freeman / Kathy Sierra / Bert Bates 著)
查看>>