zoukankan      html  css  js  c++  java
  • react进阶第七讲:渲染控制

    render阶段做了什么

    通过React.CreateElement,生成新的state和props,得到新的element对象。接下来,会对比这一次和上一次渲染的Virtual DOM,只在真正的DOM树中修改差别的部分。

    控制render的方法

    主要通过两种方式:

    • 从自身控制是否render。如shouldComponent和PureComponent。
    • 从父组件直接隔断子组件的渲染。如通过memo,缓存element对象。

    方式一:自身控制

    shouldComponentUpdate(nextProps, nextState)

    shouldComponentUpdate返回一个布尔值,告诉组件需不需要继续这次更新。shouldComponentUpdate返回true,则继续更新,调用render函数;返回false,则停止更新,不调用render函数。

    PureComponent

    当开发类组件选择了继承 PureComponent,会通过内部的shouldComponentUpdate浅比较 state 和 props 是否相等。

    React.memo(Component,compare)

    参数说明:

    • Component是组件本身
    • 第二个参数 返回 true 组件不渲染 , 返回 false 组件重新渲染。和 shouldComponentUpdate 相反。
    • 当二个参数 compare 不存在时,会用浅比较处理 props ,相当于仅比较 props 版本的 pureComponent 。
    • 同样适合类组件和函数组件。

    方式二:隔断自组件渲染,缓存对象

    useMemo(create,deps)

    • 返回一个 memoized 值。
    • 第一个参数为一个函数,函数的返回值作为缓存值.
    • 第二个参数为一个数组,存放当前 useMemo 的依赖项。

    useMemo 会记录上一次执行 create 的返回值,并把它绑定在函数组件对应的 fiber 对象上,只要组件不销毁,缓存值就一直存在,但是 deps 中如果有一项改变,就会重新执行 create ,返回值作为新的值记录到 fiber 对象上。

    useMemo应用场景

    • 可以缓存 element 对象,从而达到按条件渲染组件,优化性能的作用。
    • 如果组件中不期望每次 render 都重新计算一些值,可以利用 useMemo 把它缓存起来。
    • 把函数和属性缓存起来, 配合hooks使用。
  • 相关阅读:
    stop slave卡住
    ERROR 1193 (HY000): Unknown system variable ‘rpl_semi_sync_master_enabled‘
    sqlalchemy QueuePool limit of size 3 overflow 20 reached, connection timed out, timeout
    Orchestrator 集群扩容后新节点无法加入集群
    关于golang database_sql 包
    MySQL主从集群搭建实战
    数据库分库分表事务解决方案
    如何编写单元测试-基于Spring
    扩展Spring切面
    springboot自定义配置源
  • 原文地址:https://www.cnblogs.com/renzhiwei2017/p/15670827.html
Copyright © 2011-2022 走看看