前言:之前的项目中,在遇到redux的深层嵌套问题时,直接使用深拷贝的库对state进行深拷贝再操作并返回修改后的新的state,一直觉得很不优雅和低效。下一个项目中打算在redux中使用Immutable.js。在此对一些API进行简单记录。日后用到其它也会慢慢补充
Immutable的中文翻译就是不可变,所以。对Immutable对象每一个操作都是返回的一个新的对象。寒假的时候再看看这个库的源码吧, 文档地址
Immutable中的一些数据结构
Map 无序键值对(有点像js的Object)
设置
- set (对应delete、deleteAll)/ setIn 深层设置数据
//浅层
- update 更新数据/updateIn 深层更新数据
- mergemergeWith 两个Map的合并
mergeWith 可用于解决冲突
- mergeDeep 深层合并 / mergeDeepWith深层合并手动解决冲突
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