hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

    • React中context的用法
    • React中Hooks的使用
    • React之immutable的使用
      • 常规immutable
      • react中使用immutable
      • redux-immutable
    • React性能优化
    • Redux的使用
    • 为什么项目不使用Redux
    • React配置Webpack开发环境
    • 谈谈Vue/React中的虚拟DOM(VDOM)与Key值
  • JavaScript

  • Vue

  • 混合开发

  • 学习笔记

  • 微信小程序

  • 前端
  • React
hn-failte
2019-02-28

React之immutable的使用

# React中immutable的使用

React开发中,Redux是必不可少的,而Redux数据单一不变的思想,往往会在Reducer中写深拷贝,对性能产生或多或少的影响,而immutable就是为了解决这个问题产生的......

# 常规immutable

  • Immutable :持久化数据结构(数据不可修改)、链式调用(每次都会返回的immutable对象)

    import immutable from "immutable"
    //创建map
    const map = immutable.Map({ //与ES6的map不同
        a:1,
        b:2,
        obj:{}
    })
    //增
    let map1 = map.set("c",3) //新创建的,不会影响初始值
    let map2 = map.setIn(["obj","name"],"zs")
    //删
    let map3 = mao.delete("a")
    let map4 = map.deleteIn(["obj","name"])
    //改
    let map5 = map.update("a",params=>params=10)
    //let map5 = map.update("a",()=>10)  ?
    let map6 = map.updateIn(["obj","name"],name=>name="ws")
    //查
    let map7 = map.get("a")
    let map8 = map.getIn(["obj","name"])
    //合并
    let map9 =map.merge(map1)
    //转换为原生对象
    let mp10 = map.toObject() //单层次(一层)
    
    immutable.isImmutable(map2)
    map.size()
    immutable.is(map1,map2)
    
    //创建list
    const list = immutable.List([1,2,3,4])
    //增
    let list1 = list.push()
    //删与改
    let list2 = list.splice(0,1)
    //查
    let list3 = list.get(0);
    let list4 = list.getIn([list, 0]);
    //合并
    let list5 = list1.concat(list2)
    //转换为原生对象
    let list6 = toArray() //单层次(一层)
    
    
    //fromJS  深层次转换  可以将所有的原生JS对象转换为immutable对象
    let state = immutable.fromJS({})
    //toJS  深层次转换  将immutable对象转换为原生JS对象
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47

# react中使用immutable

reducer.js

import immutable from "immutable"

const defaultState = immutable.fromJS({

})

return state.updateIn(["key"], key=>{let newkey = key; return key})
1
2
3
4
5
6
7

# redux-immutable

用处:

引入该插件,将会使整个store对象成为immutable对象,每一个模块都是一个对象

store.js

import {combineReducer} from "redux-immutable"

const reducer = combineReducer({reducer1, reducer2})
1
2
3
编辑 (opens new window)
#Immutable
上次更新: 2021/08/05, 12:37:41
React中Hooks的使用
React性能优化

← React中Hooks的使用 React性能优化→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式