美文网首页
关于render渲染优化

关于render渲染优化

作者: 皮卡皮卡皮卡丘11 | 来源:发表于2020-01-02 21:46 被阅读0次

关于render渲染优化

除初始化组件渲染外,组件会在以下两种情况下发生重渲染:

1、当调用setState()函数时,组件会发生重渲染,即使组件的state未发生改变;

2、当父组件发生重渲染时,其全部子组件都会重渲染。

在父组件中通过调用异步函数修改了某一参数值,将其传递给子组件后,在子组件的componentDidMount()函数中获取到的仍然是未修改之前的值:原来父组件传递的参数改变后,子组件会重新渲染的只有render函数

虽然React的重渲染机制是严谨的,但是也是非常耗时的,我们有两种方式来阻止组件不必要的重渲染。

shouldComponentUpdate(nextProps,nextState)

shouldComponentUpdate(nextProps,nextState )是重渲染时render函数调用之前被调用的函数,它接收两个参数:nextProps和nextState,分别表示下一个props和下一个state的值,并且,当函数返回false时,阻止接下来的render()函数的调用,阻止组件重渲染,而返回true时,组件照常重渲染,React默认返回true。

import React from 'react'; class Test extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      strTest: "render测试"      //设state中strTest值        
    }
  }
  
  //这里调用了setState但是并没有改变setState中的值    
  handleClick = () => {
    const prestrTest = this.state.strTest;
    this.setState({
      prestrTest: this.state.strTest
    })
  }

  //在render函数调用前判断:如果前后state中的内容不变,通过return false阻止render调用  
  shouldComponentUpdate (nextProps, nextState) {
    if (nextState.strTest == this.state.strTest) {
      return false
    }
  }
  
  render () {
    //当render函数被调用时,打印当前的strTest        
    console.log(this.state.strTest)
    return (
      <h1 onClick={this.handleClick}>
        {this.state.strTest}
      </h1>)
  }
} 
export default Test;

PureComponet

PureComponet原理:只需要把组件的继承类从Component换成PureComponent即可。PureComponent 自动加载了shouldComponentUpdate 函数,当组件更新时,shouldComponentUpdate 对props和state进行了一层浅比较,如果组件的props和state都没有发生改变,render方法就不会触发,省去Virtual DOM的生成和对比过程,达到提升性能的目的。

但是由于PureComponent对props和state只进行了浅比较,所以对与嵌套的对象并不适用。

render渲染优化

  • 属性传递优化
    1. 比较this绑定五种方法的性能
    2. 父向子传递对象时,应将其先定义再使用
    3. 在传递props/state时,只传递需要的参数
  • shouldComponentUpdate(nextProps,nextState):比较值未改变时,阻止render
  • PureComponet:自动加载了shouldComponentUpdate 函数,进行浅比较,故不适用于嵌套的对象

相关文章

  • 关于render渲染优化

    关于render渲染优化 除初始化组件渲染外,组件会在以下两种情况下发生重渲染: 1、当调用setState()函...

  • 关于render渲染次数

    关于render渲染次数 页面加载render执行几了次(五) 单纯的前端渲染render在componentWi...

  • iOS性能优化笔记

    本文收录一些基本的性能优化的方法: iOS 离屏渲染优化(Offscreen Render)

  • 2018-07-04

    后台绘制圆角图片 参考链接链接 iOS 离屏渲染优化(Offscreen Render)

  • 一文搞定react性能优化(代码方向)

    今天写一篇关于react性能优化的文章啦。我们知道react有个痛点,就是会频繁触发不必要的render渲染,只要...

  • React 文档再学习 2 增加交互

    渲染(Render)和提交(Commit) 组件展示在页面之前,须有React 渲染 (Render)。可以如此想...

  • React函数组件优化

    主要针对于函数组件,父组件重渲染时,减少子组件不必要的渲染。 性能优化方向 1.减少重新 render 的次数 2...

  • 渲染(Render)

    熟悉后台的同学一定知道数据绑定模式 简而言之就是挖空填洞 模板的渲染就是说洞已经挖好了,然后渲染就是个填洞的过程 ...

  • render渲染

    react实际渲染更新过程(reactElement、diff、setState) 一个模块中props,data...

  • render渲染组件

    render render渲染组件,也可以实现components一样的效果 render 和 component...

网友评论

      本文标题:关于render渲染优化

      本文链接:https://www.haomeiwen.com/subject/hehaoctx.html