小帅の技术博客 小帅の技术博客
首页
  • 基础
  • 框架
  • 进阶
  • 工程化
  • NodeJS
  • 脚本
  • 拓展
  • 技术
  • 服务器
程序猿
关于
友链
  • 分类
  • 标签
  • 归档
GitHub

前端小帅

学而不思则罔,思而不学则殆
首页
  • 基础
  • 框架
  • 进阶
  • 工程化
  • NodeJS
  • 脚本
  • 拓展
  • 技术
  • 服务器
程序猿
关于
友链
  • 分类
  • 标签
  • 归档
GitHub
  • 基础

  • 工程化

  • 框架

    • vue3使用总结
    • vue编译为js的研究
    • react状态管理器-zustand
    • redux和redux-thunk分析
    • react之不可变数据分析
      • 前言
        • 数据类型
      • 什么是 Immutable Data
      • 第三方库分析
      • 和react的关系
      • 资料
    • 性能爆表的solidjs
  • 精进

  • 其他

react之immutable不可变数据分析

# 前言

首先,要想由浅入深了解清楚不可变数据(immutable data),我们应先回答下这几个问题:

何为可变数据?何为不可变数据?数据的区别?和react的关系?纯函数?

# 数据类型

对于JavaScript而言,数据主要分为基本类型和引用类型这两大类。

  • 7种原始类型:Number、String、Boolean、Null、Undefined、Symbol、BigInt
  • Object引用类型:Array、Object、Date等,几乎所有通过 new 创建的,即构造函数类型

基本类型不存在变化的特性,可以认为属于不可变数据。

JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。

  • 这样做的好处是可以节约内存,但当应用复杂后,这就造成了非常大的隐患,Mutable 带来的优点变得得不偿失。
  • 为了解决这个问题,一般的做法是使用 shallowCopy(浅拷贝)或 deepCopy(深拷贝)来避免被修改,但这样做又造成了 CPU 和内存的浪费。

JS数据类型的详细说明可见我的这篇文章彻底搞懂JS类型、类型判断、类型转换

Immutable 可以很好地解决这些问题。

# 什么是 Immutable Data

Immutable Data 就是一旦创建,就不能再被更改的数据。

  • 对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。
  • Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。
  • 同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。

# 第三方库分析

immer vs immutable

# 和react的关系

# 资料

  • Immutable 详解及 React 中实践
  • 关于React Hooks和Immutable性能优化的实践,我写了一本掘金小册
编辑
#react
上次更新: 2024/04/15, 14:35:14
redux和redux-thunk分析
性能爆表的solidjs

← redux和redux-thunk分析 性能爆表的solidjs→

最近更新
01
说说call、apply、bind是如何改变this的
03-29
02
从输入 URL 到页面加载完成发生了什么?
03-29
03
JavaScript进阶—— new 的执行过程
03-26
更多文章>
sunss | © 2020.08-2024.04 浙ICP备2022002957号-1
载入天数... 载入时分秒...  |  总访问量 次
提供CDN加速/云存储服务
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式