前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

React之Immutable学习记录(十二)

首页
2017-11-20 20:10:24
Front-End
Immutablereact

整理于互联网

# 一、前言

从问题说起:熟悉 React 组件生命周期的话都知道:调用 setState 方法总是会触发 render 方法从而进行 vdom re-render 相关逻辑,哪怕实际上你没有更改到 Component.state

this.state = {count: 0}
this.setState({count: 0});// 组件 state 并未被改变,但仍会触发 render 方法 
@前端进阶之旅: 代码已经复制到剪贴板
  • 为了避免这种性能上的浪费,React 提供了一个 shouldComponentUpdate 来控制触发 vdom re-render 逻辑的条件。于是 PureRenderMixin 作为一种优化技巧被使用。它仅仅是浅比较对象,深层次的数据结构根本不管用

js中的Immutable Data

在javascript中我们可以通过deep clone来模拟Immutable Data,就是每次对数据进行操作,新对数据进行deep clone出一个新数据

  • deep clone
  • 当然你或许意识到了,这样非常的慢
'use strict';  
var cloneDeep = require('lodash.clonedeep');

var data = {  
    id: 'data',
    author: {
        name: 'mdemo',
        github: 'https://github.com/demohi'
    }
};

var data1 = cloneDeep(data);

console.log('equal:', data1===data); //false

data1.id = 'data1';  
data1.author.name = 'demohi';

console.log(data.id);// data  
console.log(data1.id);// data1

console.log(data.author.name);//mdemo  
console.log(data1.author.name);//demohi  
@前端进阶之旅: 代码已经复制到剪贴板

这时候 immutableJS 就派得上用场了

var map1 = Immutable.fromJS({a:1, b:1, c:{b:{
fe
  • 一、前言
  • 二、什么是 Immutable Data
  • 三、为什么要在React.js中使用Immutable
  • 四、Immutable 的几种数据类型
  • 五、几个重要的API
  • 六、API
    • 创建
    • 判断是否是一个Map或者List
    • 获取大小
    • 添加元素
    • List 特有的添加元素
    • 删除元素
    • 修改元素
    • 获取某个元素值
    • 查找某个元素
    • List 特有查找某个元素
    • 查找最大、最小元素
    • 截取
    • 循环遍历
    • Map 特有 mapKeys() mapEntries()
    • merge
    • jonin() 转换为字符串
    • isEmpty() 判空
    • has() hasIn() 检查是否有某个key
    • includes() 是否包含某些元素
    • isSubset() 子集判断
    • reverse() 反转
    • 排序
    • flatten() 平铺
    • groupBy() 分组
    • flip() Map 特有翻转
    • 连接 concat()
    • 类型转换
  • 七、和React Redux 架构的结合
  • 八、思维导图总结API
  • 九、更多参考

← JavaScript常用API合集React之React Router 4(十一) →