react

99 阅读4分钟

react性能最佳优化实战

pureComponnt+immutable.js库

redux中间价原理和数据管理

antd里面webpack中bable怎样实现组件的按需加载

webpack,是借助的loader完成的jxs代码转化,还是bable

webpack打包的时候,借助脚手价将代码转化成化es5,在浏览器中使用。

  • vue是webpack里面借助webpack中vue-loader来转化
  • 而react是借助 babel babel-preset-react

虚拟dom,为什么提升了性能

就是js对象,

  • 之前的真实dom的有(事件绑定,属性,方法),模拟的比较简单,比较起来比较快。
  • diff:一层节点有问题,就不比对了,该放弃就放弃,优化算法比对次数
  • key相同直接复用

diff怎么写的的源码

  • React 通过制定大胆的 diff 策略,将 O(n3) 复杂度的问题转换成 O(n) 复杂度的问题;
  • React 通过分层求异的策略,对 tree diff 进行算法优化;
  • React 通过相同类生成相似树形结构,不同类生成不同树形结构的策略,对 component diff 进行算法优化;
  • React 通过设置唯一 key的策略,对 element diff 进行算法优化;
  • 建议,在开发组件时,保持稳定的 DOM 结构会有助于性能的提升;
  • 建议,在开发过程中,尽量减少类似将最后一个节点移动到列表首部的操作,当节点数量过大或更新操作过于频繁时,在一定程度上会影响 React 的渲染性能。

setState怎么用,传什么

//不会实现一次加一,setState是异步的,会实现合并,最终一次可以加到9,
     this.setState({
         age:this.state.age++;
     })
//而采用函数式调用,避免不必要的坑
     this.setState((preState)=>{
          age:++ preState;
     })
//在回调函数中处理,要不然拿到的是之前的,会有坑,vue用的是nextTick
     this.setState((preState)=>{
          age:++ preState;
     },()=>{
         this.refs.input.value
     })

refs的业务场景

场景

如渲染图片的宽高

写法

要写成函数形式,有助于react销毁组件,重新渲染,有效清空数据,防止内存泄露

componentDidmount(){
    this.elem
}
render(){
    return <div ref = ((div)=>{ this.elem=div })>
}

内存泄露问题

会报错,组件销毁时没有销毁,它是挂在在window上的事件 image.png 要调用this

image.png

高阶函数

设计模式中,组合优于继承,可维护性比继承要好很多 高阶组件就是一个函数,是对组件的包装,返回一个新的组件,通过在里面传入不同的参数,来实现不同效果,实现不同业务上的差异 会出现高级地狱的问题,解决问题,react新版本hook

受控组件和非受控组件

受控组件:根据数据的改变 非受控组件:就是那dom数据,而不是受数据的驱动 那个更好:受控组件,react时数据驱动的组件

this指向

render(){
    return <div onClick={()=>{console.log(this)}}>div</div>
}

为什么代码中的this指向他自己本身

这设计到了this是一个作用域链的问题,没找到,就找到了自己本身。

采用bind,apply等改变this指向,是在 constructor(props){} 里面,使函数的引用保持一份,不做无谓的渲染。

image.png

hooks

函数式组件只接受props (重点) function(props){ return <div /> } hook的出现,可以使用state

函数组件怎么做性能优化

函数组件和普通组件的性能

  • 高:函数,没有生命周期,没有构造class的过程,可以直接执行函数
  • di:props改变,整个就改变le,可以采用react.memo()去解决。

反应memo()是记忆功能组件的一个很好的工具。如果应用正确,当下一个道具与前一个道具相同时,它可以防止无用的重新渲染。 在记忆使用道具作为回调的组件时,请采取预防措施。确保在渲染之间提供相同的回调函数实例。

componentDidMonut

ssr原理

react-sage,什么事sideEffects

react,jquery,vue怎样共存

image.png

避免ajax数据重新请求

用react-redux进行状态管理

react-router4是组件思想,可以到处放,router3是放在配置页面里写的,相对比较灵活

reselect充当vue的computent(缓存数据提升性能)

异步组件

reloadable库 import('').then require.ensure

xss攻击在react中怎么防范