千家信息网

Immer.js怎么用

发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章主要讲解了"Immer.js怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Immer.js怎么用"吧!简介React的Reconcili
千家信息网最后更新 2025年02月16日Immer.js怎么用

这篇文章主要讲解了"Immer.js怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Immer.js怎么用"吧!

简介

React的Reconciliation解决了虚拟DOM更新的问题,但没有对在什么场景下优化更新给出解决方案,它不像Reactive那样能自动跟踪状态变化,而是把这个难题通过shouldComponentUpdate这个口子留给了开发者。于是开发者需要针对前后状态的变化进行对比,以决定要不要继续渲染更新DOM。如果状态对象的层次很深很复杂,那么这个对比必然会很痛苦。

但是话说回来,如果比较得很痛苦,那很有可能状态对象设计的有问题

于是Immutable诞生了,简单的可以把Immutable看做是一个黑盒,输入是对象A,输出是一个对象A‘。

用公式表示就是

假如输入对象A1和A2完全一样(但仍然不是同一个实例),那么输出的A1'和A2’能方便地比较出是否相等(提供了API直接调用来比较),同时也能从A1'或A2'里拿出A1或A2的原始数据(但A1'和A2‘仍然是两个不同的实例)。后续更新的操作也都是要通过A'的API来进行了,也就是说原始对象已经离你远去。

如果真没任何变化,那也称不上是后浪了。它基于copy-on-write机制——在当前的状态数据上复制出一份临时的草稿,然后对这份草稿涂涂改改,最后生成新的状态数据。借力于ES6的Proxy,只需要直接修改对象即可,不需要调用复杂的API(几乎只用到一个produce函数!!!),跟响应式的自动跟踪是一样的。

官网文档将其比喻成你的小秘(不是小蜜),这个小秘复制一份你的信给你涂改,然后根据涂改能帮你打印出一份新的修改后的信件。

import produce from "immer"

const baseState = [

{

todo: "Learn typescript",

done: true

},

{

todo: "Try immer",

done: false

}

]

const nextState = produce(baseState, draftState => {

draftState.push({todo: "Tweet about it"})

draftState[1].done = true

})

如果了解响应式的话,会发现

在React里,setState就变成了

this.setState(

produce(draft => {

draft.user.age += 1

})

在Redux里,Reducer就变成了

const byId = produce((draft, action) => {

switch (action.type) {

case RECEIVE_PRODUCTS:

action.products.forEach(product => {

draft[product.id] = product

})

}

})

default分支也可以省略,因为produce方法默认返回原始对象实例。

也有个例外,就是如果要返回undefined还不能直接干,得要返回nothing

import produce, {nothing} from "immer"

const state = {

hello: "world"

}

produce(state, draft => {})

produce(state, draft => undefined)

// Both return the original state: { hello: "world"}

produce(state, draft => nothing)

// Produces a new state, 'undefined'

感谢各位的阅读,以上就是"Immer.js怎么用"的内容了,经过本文的学习后,相信大家对Immer.js怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

对象 状态 更新 原始 实例 就是 数据 问题 变化 学习 复杂 痛苦 内容 开发者 草稿 开发 跟踪 输入 输出 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 大数据看板怎么连接数据库 网络技术服务价值 软件开发费如何做账 预防网络安全虚假消息内容 工程造价数据库建设方案 没有域名的服务器需要备案吗 破解sqlite数据库代码 国防科工局网络安全处处长 原神不在一个服务器可以联机吗 域名根服务器镜像节点 南京栖霞软件开发 河南弘扬网络技术有限 国家网络安全宣传周活动背景 网络安全文明建设的宣传内容 问道私服需要服务器吗 广州长毛兔网络技术 软件开发 验收报告 三方 中国移动互联网手机数据库 安全接入服务器怎么上传发票 重庆黑尔普网络技术有限公司 苹果添加163邮箱 收件服务器 新路由3能刷成打印服务器吗 数据库如何给角色授权 长城超云服务器默认密码是多少 原因是数据库关闭时 银行软件开发人员工作待遇 掘一死战服务器 软件开发投标官网 吉林大数据时间同步服务器 数据库被加密如何修复
0