介绍

更多信息

immutable中文:不变的,不可改变的

每次修改一个Immutable对象时都会创建一个新的不可变的对象,在新对象上操作并不会影响到原对象的数据。

安装

npm i immutable

一、Immutable优化性能的方式

Immutable实现的原理是持久化数据结构,也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免deepCopy把所有节点都复制一遍带来的性能损耗,Immutable使用了结构共享,即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其他节点则进行共享。

二、Immutable中Map用法

const { Map } = require("immutable")
let obj1 = {name: "rain",age: 18,arr: [1, 2, 3]
}
let obj2 = Map(obj1)
let obj3 = obj2.set("name", "snow").set("age", 20)
console.log(obj2.toJS())// { name: 'rain', age: 18, arr: [ 1, 2, 3 ] }
console.log(obj3.toJS())// { name: 'snow', age: 20, arr: [ 1, 2, 3 ] }

三、Immutable中List用法

List中的方法和JS中数组的方法大部分一样,List方法每次操作都返回一个新的数组,新数组不影响老数组。

const { List } = require("immutable")
let arr = [1, 2, 3, 4]
let arr1 = List(arr)
let arr2 = arr1.push(5)
let arr3 = arr1.pop()
console.log(arr1.toJS())// [ 1, 2, 3, 4 ]
console.log(arr2.toJS())// [ 1, 2, 3, 4, 5 ]
console.log(arr3.toJS())// [ 1, 2, 3 ]

四、fromJS()setIn()方法

 let obj1 = fromJS({name: "rain",arr: [1, 2, 3, 4, 5],dog: {name: "dog",age: 16}})// 两者等价,可见fromJS()方法更方便let obj1 = Map({name: "rain",arr: List([1, 2, 3, 4, 5]),dog: Map({name: "dog",age: 16})})let obj2 = obj1.set("name", "snow").setIn(["dog", "name"], "cat").setIn(["arr", 0], 10)// 修改dog元素的name属性,修改数组arr[0]console.log(obj2.get("name"), obj2.get("dog").get("name"), obj2.get("arr").get(0)) // snow cat 10

五、updateIn()方法

    let obj2 = obj1.updateIn(["arr"], (list) => list.splice(0, 1)) // 删除arr[0]console.log(obj2.get("arr").toJS()) // [2, 3, 4, 5]

JS immutable组件相关推荐

  1. Java 接受reactjs数据_[Java教程]react.js 父子组件数据绑定实时通讯

    [Java教程]react.js 父子组件数据绑定实时通讯 0 2017-09-23 17:00:14 import React,{Component} from 'react'import Reac ...

  2. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 参考文章: (1)js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable ...

  3. Vue.js 定义组件模板的七种方式

    转载自  Vue.js 定义组件模板的七种方式 在 Vue 中定义一个组件模板,至少有七种不同的方式(或许还有其它我不知道的方式): 字符串 模板字面量 x-template 内联模板 render ...

  4. angular移除事件绑定事件绑定_Vue.js子组件利用事件向父组件传输数据,以及sync修饰符和双向绑定...

    在Vue.js的组件中,prop是"单向绑定"的,数据只能从父组件传输到子组件.Vue文档中的说了这样做的原因: 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑 ...

  5. debounce实现 js_Vue.js以组件或者插件的形式实现throttle或者debounce

    Vue.js以组件或者插件的形式实现throttle或者debounce 发布于 2020-3-9| 复制链接 摘记: 需求在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock ...

  6. Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解

    参考自:http://www.myexception.cn/program/1930025.html https://blog.csdn.net/qq_36580777/article/details ...

  7. 360奇舞团钟恒:选用Vue.js进行组件化开发,我们遇到了哪些坑?

    责编:陈秋歌,关注前端开发领域,寻求报道或者投稿请发邮件chenqg#csdn.net. 欢迎加入"CSDN前端开发者"微信群,参与热点.难点技术交流.请加群主微信「Rachel_ ...

  8. 从零开始编写一个微信小程序(微信开发者工具+JS+WuxUI组件库+云开发)万字整理,建议收藏!

    微信小程序-魔镜 笔记&源码(微信开发者工具+JS+UI组件库+云开发) 效果展示 视频演示 经历了一次升级之后,我的小程序怎么样了? 文章目录 微信小程序-魔镜 笔记&源码(微信开发 ...

  9. Chart.js与ECharts.js图表组件对比与使用

    Chart.js与ECharts.js图表组件对比与使用 常用的 图表组件 Chart.js与ECharts.js的简要介绍与使用. Chart.js Chart.js官方网址.里面包括文档.例子和G ...

最新文章

  1. 用户态/内核态、用户栈/内核栈
  2. C++使用链表实现stack堆栈(附完整源码)
  3. 网页制作的基本语言html,网页制作基础语言HTML.ppt
  4. 用pyinstaller把python脚本编译成可执行程序(windows系统)
  5. static和const关键字
  6. QT自定义3D图形控件,支持轴拖动。
  7. HUAWEI MH5000-31 5G LGA Module Application Guide-(V100R001_01, English)
  8. python中迭代啥意思_Python中什么是迭代
  9. ACPC2015 K 树的直径
  10. OpenCV最小二乘法圆拟合
  11. 名帖385 文徵明 行草《雪诗卷》
  12. 机器也能自主区分反义词-同义词 ?!
  13. 视频直播网站源码,uniapp页面跳转的几种方法和区别
  14. 维度建模技术(1)核心概念
  15. linux ctrl r 搜索,linux下用ctrl+r快速搜索history命令
  16. 从虚拟试衣到设计海报,京东黑科技让时尚行业大变脸
  17. LeetCode刷题(160)~删除字符串中的所有相邻重复项
  18. Deep Feedback Network for Recommendation用于推荐系统的深度反馈网络
  19. 研究生的压力应对与心理健康2022秋期末答案
  20. 系列二:最全微商城营销36计!

热门文章

  1. 论文撰写应该注意的问题
  2. 普通人的煎蛋 vs 程序员的煎蛋
  3. 如何有更好的职业发展
  4. 需求过程化分析方法-实例分享
  5. suid提权(linux)
  6. 跟hoowa学做智能路由
  7. 智慧酒店RCU客控系统布线放线事项
  8. 视频滤镜软件哪个好?亲测好用的软件分享
  9. IDEA Translation(翻译插件)使用(注释翻译,单词翻译)
  10. 轻轻松松做网吧桌面同步