redux中使用immutable.js

1.immutable.js简介

        Facebook 工程师 Lee Byron 花费 3 年时间打造,与 React 同期出现,但没有被默认放到 React 工具集里(React 提供了简化的 Helper)。它内部实现了一套完整的 Persistent Data Structure,还有很多易用的数据类型。像 Collection、List、Map、Set、Record、Seq。有非常全面的map、filter、groupBy、reduce``find函数式操作方法。同时 API 也尽量与 Object 或 Array 类似。

2.不可变数据(Immutable Data)

        不可变数据指的是一经创建,就不能再被修改的数据。对Immutable对象的修改、添加、删除都会返回一个新的Immutable对象。Immutable实现的原理的是持久化数据结构,也就是使用旧数据创建新数据时要保证旧数据可用且不变。

3.为什么要使用Immutable

        redux中,为了保证reducer是一个纯函数,使用deep copy来拷贝 previous state,再依据action来加工状态,从而返回 new state。但是deep copy(对每一个节点都进行拷贝)会造成内存浪费,对浏览器的性能消耗也比较大,当state中数据过多、过深时这个缺点尤其明显。Immutable就可以很好地解决这个问题,Immutable使用了结构共享,即如果对象树中的一个节点发生变化,只拷贝这个节点和受他影响的父节点,其他节点进行共享。

        总结:immutable的不可变性让纯函数更强大,每次都返回新的immutable的特性让程序员可以对其进行链式操作,用起来更方便

5.在redux中如何使用

        5-1.先在项目内下载安装immutable     

cnpm install immutable --save

        5-2.把初始化state转化为immutable对象,需要用到一个API, Map() => 创建一个Map对象,类似于ES6的map。

import {Map} from 'immutable'

const state = Map({
    num: 10

})

        5-3.reducer函数中做一些修改,创建store对象操作不变

const reducer = (state, action) => {
    if(action.type === 'increment') {
        return state.set('num', action.data)
    }
    
    return state

}

另外:需要注意的是,在组建内获取state,因为当前state已经是一个Immutable对象,获取的时候要用get 或者  getIn(深层次的获取)获取。

6.Immutable常用API(下面写的方法map和list通用) 

7.Immutable.js的优缺点

        优点:

        1)降低mutable带来的复杂度

        2)节省内存空间        

        3) Undo/Redo,Copy/Paste,随意穿越!

                因为每次数据都是不一样的,只要把这些数据放到一个数组里储存起来,想回退到哪里就拿出对应数据即可,很容易开发出撤销重做这种功能。

        4)拥抱函数式编程

                Immutable(持久化数据结构)本身就是函数式编程中的概念。函数式编程关心数据的映射,命令式编程关心解决问题的步骤,纯函数式编程比面向对象更适用于前端开发。因为只要输入一致,输出必然一致,这样开发的组件更易于调试和组装。

        缺点:

          1)学习成本,要花时间学习Immutable.js的Api

          2)   要在项目内下载引入额外的资源

          3)容易与原生对象混

        

 

                

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值