react diffing算法及函数柯里化

news/2024/7/15 17:03:48 标签: react.js, 前端, 前端框架

一.deffing 算法

(1)虚拟DOM中Key的作用:

        当状态中的书韩剧发生变化时,react会根据【新数据】生成【新的虚拟DOM】,随后React进行【新虚拟 DOM】与【旧虚拟DOM】的diff比较,比较规则如下 :

        a.旧虚拟DOM中找到了与新虚拟DOM相同的key:

                (1)若虚拟DOMM中内容哦那个没变,直接使用之前的真实DOOM

                (2)若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中只花钱的真实DOM

        b.旧虚拟DOM中未找到与新虚拟DOM相同的key

                根据数据创建新的真实DOM,随后渲染到页面

(2)用index作为key可能会引发的问题:

        1.若对数据进行:逆序添加、逆序删除等破环顺序操作后,会产生没必要的真实DOOM更新。

        2.如果结构中还包含输入类的DOM:会产生错误DOM更新。

        3.注意:如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表展示,使用index作为key时没有问题的。

(3)开发中如果选择key?

        1.最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一标识值。

        2.如果确定只是简单的展示数据,用index也是可以的。

二.高阶函数和柯里化

高阶函数:如果一个函数符合下面两种规范中的任何一个,那该函数就是高阶函数.

        1.若A函数,接收的参数是一个函数,那么A就可以称为高阶函数

        2.若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数.

        常见的高阶函数有:prmise\setTimeout\arr.map()[数组函数]等等

函数的柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式。如下代码展示:

class Login extends React.Component{
            // 初始化
            state = {username:'',password:''}
            // 这就是柯里化代码
            saveForm = (dataType)=>{
                console.log("dataType",dataType)
                return (event)=>{
                    console.log("event",event)
                    this.setState({[dataType]:event.target.value})
                }
            }
            sendInfo = (enent)=>{
                event.preventDefault() //阻止表单提交
                const {username,password} = this.state
                alert(`您输入的用户名是:${username},您输入的密码是:${password}`)
            }
            render(){
                return (<div>
                    <form  onSubmit={this.sendInfo}>
                        用户名:<input onChange={this.saveForm('username')} type="text" name="username" />    
                        密码:<input onChange={this.saveForm('password')}  type="password" name="password" />    
                        <button>登录</button>
                    </form>  
                </div>)
            }
        }

也可以不使用柯里化写法,但是要从传参那改变,如下代码所示:

class Login extends React.Component{
            // 初始化
            state = {username:'',password:''}

            saveForm = (dataType,event)=>{
                this.setState({[dataType]:event.target.value})
            }
            sendInfo = (enent)=>{
                event.preventDefault() //阻止表单提交
                const {username,password} = this.state
                alert(`您输入的用户名是:${username},您输入的密码是:${password}`)
            }
            render(){
                return (<div>
                    <form  onSubmit={this.sendInfo}>
                        {/*在onChange传回调箭头函数,那在saveForm函数中就可以按照原来的写法做了*/}
                        用户名:<input onChange={(event)=>{this.saveForm('username',event)}} type="text" name="username" />    
                        密码:<input onChange={(event)=>{this.saveForm('password',event)}}  type="password" name="password" />    
                        <button>登录</button>
                    </form>  
                </div>)
            }
        }


http://www.niftyadmin.cn/n/5468483.html

相关文章

Java RESTful API开发:搭建基于Spring Boot的轻量级API服务

引言&#xff1a; 在当今互联网时代&#xff0c;API&#xff08;Application Programming Interface&#xff09;已经成为了各种软件系统之间交互的重要方式。而REST&#xff08;Representational State Transfer&#xff09;则是一种设计风格&#xff0c;用于构建分布式系统中…

【airtest】自动化入门教程(四)Poco元素定位

目录 一、基础操作 1、通过属性名等方式 2、通过属性组合 3、子节点方式 4、子节点加属性组合方式 5、孙节点offspring 6、兄弟节点sibling 7、父节点parent 8、正则表达式 9、直到某个元素出现 10、直到某个元素消失 二、通过局部坐标定位 1、使用局部坐标系的cli…

不能在主机和虚拟机之间拷贝文本(虚拟机ubuntu16.04)

问题 ubuntu16.04不能在主机和虚拟机之间拷贝文本。 原因 vmware tools没安装好。 解决办法 重新安装vmware tools&#xff0c;步骤入下&#xff1a; 让虚拟机加载C:\Program Files (x86)\VMware\VMware Workstation\linux.iso光盘文件&#xff0c;设置如下&#xff1a; …

交互设计师、UI设计师、视觉设计师面试作品集包装模板figma源文件

页面数量&#xff1a;19页 页面尺寸&#xff1a;1920*1080PX 交付格式&#xff1a;figma 赠送文件&#xff1a;24款高质量样机 交付文件&#xff1a;作品集模板源文件、作品集包装psd源文件、作品集所用字体文件 该作品集虽然只有19页&#xff0c;但可根据需求复制作品集里已有…

UE4_材质节点

UE4_材质节点 2017-12-07 13:56 跑九宫格 跑UV 评论(0)

网站访问502,网站服务器崩溃,比较常见几个的原因

其实&#xff0c;配置再好的服务器也难免在使用过程中出现一些故障&#xff0c;造成宕机。 服务器一旦出现故障&#xff0c;影响到用户实时访问网站&#xff0c;造成用户流失&#xff0c;如果在企业的销售高峰期&#xff0c;则将直接影响到商业利润&#xff0c;而且不仅影响外…

3D归档后模型缺失怎么回事?---模大狮模型网

在进行3D建模工作时&#xff0c;我们经常会将模型进行归档以备将来使用。然而&#xff0c;有时在需要重新打开归档的模型时&#xff0c;可能会发现部分模型缺失或出现问题。模大狮将探讨在3D归档后模型缺失的可能原因以及解决方法。 一、文件保存问题 在进行3D归档时&#xff…

单例模式(加深版)

单例模式&#xff08;加深版&#xff09; 饿汉模式 缺点&#xff1a;造成资源的浪费 示例&#xff1a; ## 懒汉模式 示例&#xff1a; 枚举类型单例模式 示例&#xff1a;