教程 immer tutorial

Immer 中文教程

欢迎来到 Immer 中文教程。Immer 是一个轻量级的 JavaScript 库,它允许你以更简单的方式处理不可变状态。

Immer 获得了 2019 年 "年度突破"React 开源奖和"最有影响的贡献"JavaScript 开源奖。

📖 教程大纲

基础篇:核心概念

进阶篇:高级特性

  • API 参考 - 详细了解 Immer 的所有 API。
  • Map 和 Set - 使用 Immer 处理 Map 和 Set 数据结构。
  • 数组方法 - 掌握 Immer 中的数组操作。
  • 复杂对象 - 处理嵌套复杂对象的技巧。
  • Current - 了解 current 函数的用法。
  • Original - 使用 original 函数获取原始对象。
  • Patches - 学习如何生成和应用补丁。
  • 冻结 - 了解 Immer 的冻结机制。
  • Return - 学习如何在 recipe 中返回新状态。
  • 异步操作 - 在异步场景中使用 Immer。
  • TypeScript 支持 - 为 Immer 提供类型支持。

资源篇:实践与参考

🔥 为什么选择 Immer?

  • 简化不可变数据处理 - 使用普通 JavaScript 语法修改不可变数据
  • 减少样板代码 - 不再需要大量的展开操作符 (...)
  • 结构共享 - 高效的内存使用,只复制变更的部分
  • 自动冻结 - 防止意外修改,提高代码可靠性
  • 类型安全 - 良好的 TypeScript 支持
  • 极小体积 - 只有 3KB gzip 大小

🚀 快速代码演示

不使用 Immer

javascript
const baseState = [
  { title: "Learn TypeScript", done: true },
  { title: "Try Immer", done: false }
]

// 需要手动浅拷贝每一层结构
const nextState = baseState.slice()
nextState[1] = {
  ...nextState[1],
  done: true
}
nextState.push({ title: "Tweet about it" })

使用 Immer

javascript
import { produce } from "immer"

const baseState = [
  { title: "Learn TypeScript", done: true },
  { title: "Try Immer", done: false }
]

// 直接修改 draft 对象即可
const nextState = produce(baseState, draft => {
  draft[1].done = true
  draft.push({ title: "Tweet about it" })
})

📚 相关资源