Immer项目安装与版本选择指南
immer 项目地址: https://gitcode.com/gh_mirrors/imm/immer
什么是Immer
Immer是一个JavaScript库,它通过使用不可变数据结构来简化状态管理。其核心思想是允许你使用可变的方式编写代码,但实际上产生的是不可变的数据结构。这种方式既保持了代码的简洁性,又确保了数据的不可变性。
安装Immer
Immer可以作为一个直接依赖项安装,并且可以在任何ES5环境中运行。以下是几种常见的安装方式:
包管理器安装
-
使用Yarn安装:
yarn add immer
-
使用NPM安装:
npm install immer
CDN引入
对于不使用包管理器的项目,可以通过CDN直接引入:
<script src="https://unpkg.com/immer"></script>
或者使用JSDelivr:
<script src="https://cdn.jsdelivr.net/npm/immer"></script>
重要提示:使用CDN时,建议指定具体版本号,以避免未来更新导致意外问题。例如:
<script src="https://unpkg.com/immer@6.0.3/dist/immer.umd.production.min.js"></script>
如果需要开发版本,可以将production.min
替换为development
。
版本与功能选择
从Immer 6版本开始,为了保持库的精简,一些不常用的功能被设计为可选功能,需要显式启用。这样可以确保在生产环境中打包时,不会包含未使用的功能代码。
可选功能列表
| 功能 | 描述 | 启用方法 | |------|------|----------| | ES2015 Map和Set支持 | 使Immer能够操作原生Map和Set集合 | enableMapSet()
| | JSON Patch支持 | 允许Immer跟踪对草稿对象的所有更改,用于通过JSON Patch通信变更 | enablePatches()
|
使用示例
如果需要使用produce
处理Map对象,需要在应用程序入口处启用此功能:
// 在应用程序入口处
import {enableMapSet} from "immer"
enableMapSet()
// ...后续代码
import {produce} from "immer"
const usersById_v1 = new Map([
["michel", {name: "Michel Weststrate", country: "NL"}]
])
const usersById_v2 = produce(usersById_v1, draft => {
draft.get("michel").country = "UK"
})
体积分析
基础Immer库大小约为3KB(gzip压缩后)。每个启用的插件会增加不到1KB的体积:
- 基础导入:约5KB
- 仅produce:约3.3KB
- 启用MapSet支持:增加约0.7KB
- 启用Patches支持:增加约0.8KB
兼容性考虑
旧版JavaScript环境
默认情况下,produce
会尝试使用Proxy以获得最佳性能。但在以下环境中Proxy不可用:
- Microsoft Internet Explorer
- React Native(版本低于0.59,或在使用Hermes引擎且版本低于0.64的Android设备上)
在这些情况下,Immer会回退到ES5兼容的实现,功能相同但性能稍低。
版本注意事项:
- 从版本6开始,必须显式调用
enableES5()
来启用回退实现 - 版本10完全移除了回退实现,不支持Proxy的浏览器/引擎将无法使用
总结
Immer提供了灵活的安装方式和可选的特性支持,使其能够适应各种项目需求。开发者可以根据项目实际情况选择合适的安装方式和需要启用的功能,在保持代码简洁性的同时,确保最佳的性能和兼容性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考