什么是immutable?为什么要使用它?(代码片段)

勇敢*牛牛 勇敢*牛牛     2022-12-05     789

关键词:

什么是 immutable?为什么要使用它?

immutable是一种持久化数据。一旦被创建就不会被修改
Immutable对象的任何修改或添加删除操作都会返回一个新的 Immutable对象
Immutable 实现的原理是 Persistent Data Structure(持久化数据结构

  • 用一种数据结构来保存数据
  • 当数据被修改时,会返回一个对象,但是新的对象会尽可能的利用之前的数据结构而不会对内存造成浪费
  • 如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享

使用Immutable对象最主要的库是immutable.js,immutable.js 是一个完全独立的库,无论基于什么框架都可以用它,其出现场景在于弥补 Javascript 没有不可变数据结构的问题,内部提供了一套完整的api.还有很多易用的数据类型,

  • List: 有序索引集,类似 JavaScript 中的 Array

  • Map: 无序索引集,类似 JavaScript 中的 Object

  • Set: 没有重复值的集合


fromJS():将一个js数据转换为Immutable类型的数据
toJS():将一个Immutable数据转换为JS类型的数据
is():对两个对象进行比较
get(key):对数据或对象取值
getIn([]) :对嵌套对象或数组取值,传参为数组,表示
.setIn使用 setIn 赋值位置


  • 用 Immutable可以给 React 应用带来性能的优化,主要体现在减少渲染的次数

  • 在做react性能优化的时候,为了避免重复渲染,我们会在shouldComponentUpdate()中做对比,当返回true执行render方法,Immutable通过is方法则可以完成对比,而无需像一样通过深度比较的方式比较

  • 在使用redux过程中也可以结合Immutable,不使用Immutable前修改一个数据需要做一个深拷贝

import Immutable from 'immutable';
foo = Immutable.fromJS(a: b: 1);
bar = foo.setIn(['a', 'b'], 2);   // 使用 setIn 赋值
console.log(foo.getIn(['a', 'b']));  // 使用 getIn 取值,打印 1
console.log(foo === bar);  //  打印 false

react中为什么要使用immutable

因为在react中,react的生命周期中的setState()之后的shouldComponentUpdate()阶段默认返回true,所以会造成本组件和子组件的多余的render,重新生成virtualdom,并进行virtualdomdiff,所以解决办法是我们在本组件或者子组件中的shouldComponentUpda... 查看详情

什么是 PDO,它与 SQL 注入有什么关系,为什么要使用它?

】什么是PDO,它与SQL注入有什么关系,为什么要使用它?【英文标题】:WhatisPDO,howisitrelatedwithSQLinjection,andwhyIshouldusethis?【发布时间】:2014-12-0505:42:27【问题描述】:其实我google了这么多结果,但是看不懂,因为我是这个领域的... 查看详情

java中为什么string是immutable的(代码片段)

本文翻译自:http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/这是一个很老但很流行的问题,这里有几个原因String在java中被设计成immutable的。对内存、同步、数据结构等有好的理解,能更好的回答这个问题。下面我将简单的... 查看详情

在react/redux中使用immutable(代码片段)

...少说明Immutable是很有价值的,下面我们来一探究竟。1、什么是Immutable?Immutable是一旦创建,就不能被更改的数据。对Immutable对象的任何修改或添加删除操作都会返回一个新的Immutabl 查看详情

guava集合--immutable(不可变)集合(代码片段)

...变集合,顾名思义就是定义了之后不可修改的集合。一.为什么要使用不可变集合不可变对象有很多优点,包括:当对象被不可信的库调用时,不可变形式是安全的;不可变对象被多个线程调用时,不存在竞态条件问题不可变集... 查看详情

[react]immutable的原理是什么

[react]immutable的原理是什么使用字典树持久化数据结构,更新时可优化对象生成逻辑,降低成本个人简介我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,但坚持一定很酷。欢迎大家一起讨论主目录与歌谣... 查看详情

什么是ghostscript,为什么要使用它? [关闭]

】什么是ghostscript,为什么要使用它?[关闭]【英文标题】:Whatisghostscript,whyitisused?[closed]【发布时间】:2011-08-1014:39:30【问题描述】:我想知道ghostscript?我已经看到像可爱的pdf等少数软件需要它。它实际上是做什么的?为什么... 查看详情

immutable(代码片段)

...它可以有效的避免错误赋值的问题二、immutable在react中的使用安装npminstallimmutable使用在react中,immutable主要是防止state对象被错误赋值。将js对象转成immutable对象importfromJSfrom‘immutable‘;constdefaultState=fromJS(todoLi 查看详情

什么是 serialVersionUID,我为什么要使用它?

】什么是serialVersionUID,我为什么要使用它?【英文标题】:WhatisaserialVersionUIDandwhyshouldIuseit?【发布时间】:2010-09-2202:19:12【问题描述】:当serialVersionUID丢失时,Eclipse会发出警告。可序列化类Foo没有声明静态finallong类型的serialVer... 查看详情

比immutable更简洁的immutability-helper不可变数据操作之使用总结(代码片段)

...ility-helper,使用过程中的一些总结,跟大家分享下,至于为什么不是immutable,请看下文分解,这里是@IT·平头哥联盟,我是首席填坑官——苏南 查看详情

什么是“批量标准化”?为什么要使用它?它如何影响预测?

】什么是“批量标准化”?为什么要使用它?它如何影响预测?【英文标题】:Whatis"batchnormalizaiton"?whyusingit?howdoesitaffectprediction?【发布时间】:2017-05-0706:40:15【问题描述】:最近,许多深度架构使用“批量标准化”进行... 查看详情

什么是无限迭代器?为什么要使用它?

】什么是无限迭代器?为什么要使用它?【英文标题】:WhatisanInfiniteIterator?Whyuseit?【发布时间】:2012-03-2315:15:57【问题描述】:我正在尝试理解我在作业中必须回答的以下问题。它询问无限迭代器。它们在哪里有用?我认为迭... 查看详情

什么是角度状态管理?我为什么要使用它?

】什么是角度状态管理?我为什么要使用它?【英文标题】:Whatisstatemanagementinangular?andwhyshouldIuseit?【发布时间】:2019-02-2712:29:27【问题描述】:我是Angular的新手,这个问题可能非常广泛。但我有兴趣了解更多关于状态管理用法... 查看详情

什么是断言?你为什么要使用它们?

】什么是断言?你为什么要使用它们?【英文标题】:Whatareassertions?andwhywouldyouusethem?【发布时间】:2008-10-3111:28:32【问题描述】:如何在C++中完成断言?示例代码表示赞赏。【问题讨论】:【参考方案1】:断言是一种明确检查... 查看详情

什么是 TDS 协议 8.0 版,我为什么要使用它?

】什么是TDS协议8.0版,我为什么要使用它?【英文标题】:WhatisTDSProtocolVersion8.0andwhyshouldIuseit?【发布时间】:2012-06-0422:28:58【问题描述】:一段时间以来,我一直在使用带有8.0协议的FreeTDS连接到MSSQL数据库,并且效果很好。但... 查看详情

什么是检查点节点 HDFS?为什么要使用它?

】什么是检查点节点HDFS?为什么要使用它?【英文标题】:WhatischeckpointnodeHDFS?Whyuseit?【发布时间】:2016-08-1814:48:54【问题描述】:我是hadoop的新手,所以请给出答案。我了解namenode和datanode的基本知识。【问题讨论】:我们不是... 查看详情

python为什么要使用描述符?(代码片段)

学习Python这么久了,说起Python的优雅之处,能让我脱口而出的,Descriptor(描述符)特性可以排得上号。描述符是Python语言独有的特性,它不仅在应用层使用,在语言的基础设施中也有涉及。我可以大胆地猜测,你对于描述符的... 查看详情

immutable使用(代码片段)

...结构的实现之一。它实现了完全的持久化数据结构,通过使用像tries这样的先进技术来实现结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用(和垃圾回收的失效)。2.immutable.js三大特性:Persis... 查看详情