Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 在线搜索
  • 文章标签
  • 文章投稿
  • 赞助一下
  • 关于我们

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
网站收录 / 问题反馈

Immer

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://immerjs.github.io/immer
GitHub:https://github.com/immerjs/immer
描述信息:一个专门处理不可变数据的 JavaScript 库
访问官网
GitHub

写 React 的同学对不可变数据肯定不陌生。更新个嵌套对象,恨不得写一屏幕展开运算符,一层套一层,看着都头疼。

有没有一种办法,既能像改普通对象那样写代码,又能保证数据不被修改?有,Immer 就是干这个的。


Immer 是什么

Immer 是一个专门处理不可变数据的 JavaScript 库。它的核心就一个函数 produce:你传入当前状态和一个修改函数,在修改函数里随便改,Immer 会自动生成一个新的不可变对象,原对象一点不动。


安装

npm i immer

导入依赖:

// CommonJS
const { produce } = require('immer')

// ESM
import { produce } from 'immer'


怎么用

直接看代码就明白了:

import { produce } from 'immer'

const state = {
  user: {
    name: '张三',
    age: 1,
    address: {
      city: '四川'
    }
  }
}

// 不用 Immer:层层展开,写到手抽
const newState1 = {
  ...state,
  user: {
    ...state.user,
    age: 2,
    address: {
      ...state.user.address,
      city: '北京'
    }
  }
}

// 用 Immer:直接改,简单粗暴
const newState2 = produce(state, draft => {
  draft.user.age = 2
  draft.user.address.city = '北京'
})

两种写法结果完全一样,但第二种明显好写多了。


原理是什么

Immer 用了 ES6 的 Proxy 代理了对 Draft 的所有操作。你看着是在直接修改数据,实际上 Proxy 在后面帮你记录改动了哪里。只有在实际修改的地方才会创建新引用,没改到的部分直接复用原来的,所以性能也不差。


在哪里用

React 项目:用 useState 或 useReducer 管理复杂状态对象时,不用自己写展开运算符。

Redux:Redux Toolkit 里已经内置了 Immer。如果你在用 Redux Toolkit,其实已经在用 Immer 了,只是没察觉到。

任何需要不可变数据的场景:只要浏览器支持 Proxy(IE 不行),都可以用 Immer 来管理复杂状态。


最后

Immer 解决的就是一个痛点:不可变数据写起来太麻烦。它不是给你加新功能,是让你写代码更省事。

非 React 项目也能用,Node.js 和现代浏览器都支持,直接拿来管理复杂状态就很舒服。

仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/5141

更多»
热门资源
swiper
目前应用较广泛的移动端网页触摸内容滑动js插件
官网
GitHub
layer
layer是一款口碑极佳的web弹层组件
点击进入
GitHub
iScroll.js
IScroll是移动页面上被使用的一款仿系统滚动插件。
官网
GitHub
wangEditor
基于javascript和css开发的 Web富文本编辑器
官网
GitHub
ueditor
由百度web前端研发部开发所见即所得富文本web编辑器
官网
GitHub
highlight
Highlight.js 是一个用 JavaScript 写的代码高亮插件,在客户端和服务端都能工作。
官网
GitHub
UglifyJS
一个js 解释器、最小化器、压缩器、美化器工具集
官网
GitHub
lozad.js
高性能,轻量级,可配置的懒加载图片工具
官网
GitHub
Sortable.js
简单灵活的 JavaScript 拖放排序插件
官网
GitHub
validate.js
表单提供了强大的验证功能,让客户端表单验证变得更简单
官网
GitHub
Draggin.js
一款兼容移动手机的js拖拽插件
官网
GitHub
lazysizes.js
响应式图像延迟加载JS插件【懒加载】
官网
GitHub
类似于Immer的资源
vue-js-popover
用于下拉/弹出/工具提示的Vue插件
官网
GitHub
ng2-toasty
一个angular的消息提示组件
点击进入
GitHub
circles
基于HTML5 SVG的轻量级Js圆形进度条插件
官网
GitHub
hashids.js
数字生成类似YouTube的ID的js库
官网
GitHub
Keypress.js
一款强大的键盘输入,可捕获侧重于游戏输入的Javascript
官网
GitHub
zingtouch
一个 JavaScript 触摸手势检测库
官网
GitHub
atrament.js
用于在HTML Canvas上进行漂亮的绘图和手写功能
官网
GitHub
TheoremJS
用于在JavaScript中进行计算的数学库
官网
GitHub
目录

手机扫一扫预览

首页 技术导航 在线工具 技术文章 教程资源 前端标签 AI工具集 前端库/框架

Copyright © 2018 Web前端开发网 All Rights Reserved. 分享编程学习资源(教程/框架/库)、在线工具、技术教程、内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。