• React(1) Diff 算法中的 key


    1. diff算法

    关键点在于 key,key是虚拟dom 中的标识,当列表数据变化产生新的虚拟dom,React 会把前后新旧虚拟dom 进行 diff 对比

    • key 不变:
      • 对应的 遍历item 数据不变,直接使用原始真实dom
      • 对应的 遍历item 数据改变,更新原始真实dom
    • key 改变:
      • 原 key 改变,销毁原始真实dom,创建新的虚拟dom,随后渲染真实dom 到页面
      • 新 key 产生,创建新的虚拟dom,随后渲染真实dom 到页面

    若用 index 作为 key 值,会造成性能降低,特殊情况下甚至出现意料之外的错误

    • 新增、删除、排序时,index 不变,内容错位,会引起大范围的真实dom 更新,效率低
    • item 中包含隐性状态,如input框中的输入内容,会带来错误的真实dom 更新

    2. 事件绑定中丢失的this

    class 组件中,给元素添加事件时,class 的方法默认不会绑定 this,当调用这个方法的时候,this 的值为 undefined。

    
    class Comp extends React.Component {
      clickHandle(){}
      render (
        <Comp onClick={this.clickHandle} />
      )
    }
    
    

    如上,react 中绑定事件时,传递的不是字符串,而是一个方法,onClick 即为中间变量,render 方法执行时,会解析生成一个托管对象,事件是委托在这个对象上的 onClick 中。因此,调用时,this 会丢失。

  • 相关阅读:
    Python中webbrowser的用法
    python爬虫笔记
    PHP yii2.0框架利用mpdf导出pdf
    PyQt5中QTableWidget设置列宽大小的几种方式
    看linux正在运行的服务用哪个命令?
    查看SELinux状态
    查看SMB服务器用户
    centOS7 下安装smb服务器
    (samba启动失败)smb.service: main process exited, code=exited, status=1/FAILURE
    Linux 操作日志
  • 原文地址:https://www.cnblogs.com/_error/p/13677689.html
Copyright © 2020-2023  润新知