Immutable.js 简记

2020-01-14 16:53:30 浏览数 (1)

前言:之前的项目中,在遇到redux的深层嵌套问题时,直接使用深拷贝的库对state进行深拷贝再操作并返回修改后的新的state,一直觉得很不优雅和低效。下一个项目中打算在redux中使用Immutable.js。在此对一些API进行简单记录。日后用到其它也会慢慢补充

Immutable的中文翻译就是不可变,所以。对Immutable对象每一个操作都是返回的一个新的对象。寒假的时候再看看这个库的源码吧, 文档地址

Immutable中的一些数据结构

Map 无序键值对(有点像js的Object)
设置
  • set (对应delete、deleteAll)/ setIn 深层设置数据
代码语言:javascript复制
//浅层
  • update 更新数据/updateIn 深层更新数据
代码语言:javascript复制
  • mergemergeWith 两个Map的合并
代码语言:javascript复制
mergeWith 可用于解决冲突
  • mergeDeep 深层合并 / mergeDeepWith深层合并手动解决冲突
代码语言:javascript复制
const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
one.mergeDeep(two)
// Map {
//   "a": Map { "x": 2, "y": 10 },
//   "b": Map { "x": 20, "y": 5 },
//   "c": Map { "z": 3 }
// }
one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two)
// Map {
//   "a": Map { "x": 5, "y": 10 },
//   "b": Map { "x": 20, "y": 10 },
//   "c": Map { "z": 3 }
// }
  • filter
  • map
  • toJS 深转化js对象
  • toJSON 浅转化js
  • toArray 浅转化
  • toObject 浅转化
读取
  • get/getIn
List 类似于js的数组
OrderedMap 有序键值对(按照设置的顺序?)
Set 无序集合类型
OrderedSet 有序集合,按照添加值顺序排序
Stack 栈 unshift shift
Record 类似于js的Object,but enforces a specific set of allowed string keys, and has default values.
Seq 有效地使用一些高价集合方法(map、filter之类的),不会产生intermediate
Collection 所有集合的基类,键值对入口可以被遍历

0 人点赞