最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 白话聊React为何采用函数式编程的不可变数据

    正文概述 掘金(展程)   2021-08-06   426

    这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

    前言

    大家好,今天来聊一下React采用函数式编程的理念:不可变数据。

    看到标题的你不用担心,你可能在顾虑需要函数式编程的知识,完全不需要,今天我们就0基础聊聊什么是不可变数据?React采用这种方式有什么好处?

    例子

    React采用函数式编程的不可变数据特性。

    而在React中不可变值的意思就是:始终保持state的原值不变。

    不要直接修改state,遇到数组或者对象,采用copy一份出去做改变。

    举个简单的例子:

    基本类型

    错误的做法:

    this.state.count++
    this.setState({
        count:this.state.count
    })
    

    正确的做法:

    this.setState({
        count:this.state.count + 1
    })
    

    引用类型

    错误的做法:

    
    this.state.obj1.a = 100
    this.state.obj2.a = 100
    this.setState({
        obj1: this.state.obj1,
        obj2: this.state.obj2
    })
    

    正确的做法:

    this.setState({
        obj1: Object.assign({}, this.state.obj1, {a: 100}),
        obj2: {...this.state.obj2, a: 100}
    })
    

    函数式编程不可变值的优势

    我们先聊聊函数式编程中不可变值的好处。

    减少bug

    好比我们用const定义一个变量,如果你要改变这个变量,你需要把变量copy出去修改。 这样的做法,可以让你的代码少非常多的bug

    生成简单的状态管理便于维护

    因为,程序中的状态是非常不好维护的,特别是在并发的情况下更不好维护。 试想一下:如果你的代码有一个复杂的状态,当以后别人改你代码的时候,是很容易出bug的。

    React中采用函数式编程的不可变值

    我们再来看看React中采用函数式编程

    性能优化

    在生命周期 shouldComponentUpdate 中,React会对新旧state进行比较,如果直接修改state去用于其他变量的计算,而实际上state并不需要修改,则会导致怪异的更新以及没必要的更新,因此采用这种方式是非常巧妙,且效率非常的高。

    可追踪修改痕迹,便于排错

    使用this.setState的方式进行修改state的值,相当于开了一个改变值的口子,所有的修改都会走这样的口子,相比于直接修改,这样的控制力更强,能够有效地记录与追踪每个state的改变,对排查bug十分有帮助。

    结尾

    关于React函数式编程你有什么观点或者想法,欢迎在评论区告诉我。


    起源地下载网 » 白话聊React为何采用函数式编程的不可变数据

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元