首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

immer:优雅操作react数据状态,告别繁琐克隆拷贝

# 前言 Immer 是一个用于简化 JavaScript 状态管理库,以更方便地更新和操作不可变数据 可以解决以下问题: 不可变状态更新:React 推崇使用不可变(Immutable)数据来管理组件状态...::: Immer 使得在 React 中使用不可变数据更加容易,通过提供简洁 API 直观语法,以可变方式更新不可变数据。...React 中使用 Immer ,可以避免手动编写深度克隆、合并对象或数组代码,同时还能保持数据不可变性,方便进行状态管理追踪变更。...# redux 中使用 immer 接下来,让我们看一个使用 Immer 结合 Redux 示例: import { createStore } from "redux"; import produce...它接收当前状态 state 表示要进行更改操作回调函数。我们可以在回调函数中对 draft 对象进行更改,Immer 会自动处理状态更新。

60320
您找到你想要的搜索结果了吗?
是的
没有找到

redux你用对了吗?

redux 三大原则 redux 开发使用必须要遵循三大原则,即: 单一数据源:整个应用 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个...前面我们介绍 redux 三大原则时候提到过,修改 state 要编写 reducer,且 reducer 必须是一个纯函数,那么问题来了,什么是纯函数呢?...带着这个问题,我们来举个例子验证下,假如我们在一个 reducer 里面直接修改 state 值,再返回修改后 state 会发生什么。 我们定义三个组件:App、Title Content。...当然,除了 immer 之外,还有别的库也同样能解决我们问题,但是 immer 应该是最简单也是最容易上手一个库之一了。...从源码角度分析了需要返回全新state原因,最后引入了immer库,引入了 immutable 概念,redux 配合 immer 可以方便我们便捷高效用好 redux

57030

React 16 - 生态:Redux

Redux 出现原因 Redux:全局只有一个唯一 Store,负责管理整个应用程序所有的状态 出发点:让组件通信更加容易 (opens new window) 特性 Single Source...{ type: 'ADD_TODO', text: 'Learn about actions' } Reducer 本质是个函数,接收 state action,返回新 state function...发出 action 如何组织 Action Reducer “标准”形式 Redux Action 问题: 所有 Action 放一个文件,会无限扩展 Action,Reducer 分开,实现业务逻辑时需要来回切换...系统中有哪些 Action 不够直观 更好组织:单个 action reducer 放在同一个文件 新方法:每个文件一个 Action 易于开发:不用再 action reducer 文件间来回切换...'] } }); immer 注意,这种适合简单场景,复杂更新会有性能问题 import produce from 'immer'; const state = { filter: 'completed

28020

JavaPython哪个更适合初学者问题

我个人不是很喜欢讨论这个问题,为什么呢,每个人都学习能力不一样,你要是不行,哪个对于你也不简单。 客观分析,这两种语言都在程序员工具箱中都占有一席之地。...编程语言就是程序员工具 例如,锤子扳手使用方式截然不同,螺丝刀与钢锯用途不同,假设现在是午夜,工匠想把钉子钉在墙上,但他唯一工具是扳手,螺丝刀钢锯?哪个最合适?...Java代码编译为字节码 - 一种直接转换为本机代码中间语言。 Java语法大量借鉴了C ++其他面向对象语言,如Smalltalk,AdaModula-3,因此其强大输入影响力。...因此,具有C ++其他语言经验程序员会发现学习起来非常舒服。...变量xy是整数,因此z变为整数,因此它被取整为2,但Python隐藏了这些东西。这看起来都很神奇。 而在Java中,变量类型更明确。这样困惑就少来很多。

60350

JavaPython哪个更适合初学者问题

大家好,又见面了,我是你们朋友全栈君。 我个人不是很喜欢讨论这个问题,为什么呢,每个人都学习能力不一样,你要是不行,哪个对于你也不简单。 客观分析,这两种语言都在程序员工具箱中都占有一席之地。...编程语言就是程序员工具 例如,锤子扳手使用方式截然不同,螺丝刀与钢锯用途不同,假设现在是午夜,工匠想把钉子钉在墙上,但他唯一工具是扳手,螺丝刀钢锯?哪个最合适?...Java代码编译为字节码 – 一种直接转换为本机代码中间语言。 Java语法大量借鉴了C ++其他面向对象语言,如Smalltalk,AdaModula-3,因此其强大输入影响力。...因此,具有C ++其他语言经验程序员会发现学习起来非常舒服。...变量xy是整数,因此z变为整数,因此它被取整为2,但Python隐藏了这些东西。这看起来都很神奇。 而在Java中,变量类型更明确。这样困惑就少来很多。

40630

2020 年你应该知道 React 库

如何开始 React 如果你是一个完全不熟悉 React 初学者想创建一个 React 项目,加入 React 世界。有许多工具包项目可以选择,每个项目都试图满足不同需求。...如果你已经熟悉 React,你可以选择它流行入门工具包之一: Next.js Gatsby.js。这两个框架都建立在 React 之上,因此你应该已经熟悉 React 基本原理。...如果您只是想了解这些初学者工具包是如何工作,那么可以尝试从头开始设置 React 项目。你将从一个基本 HTML JavaScript 项目开始,然后自己添加 React 和它支持工具。...如果你想选择一个自定义样板项目,试着缩小你要求。样板文件应该是最小,不要试图解决所有问题。它应该针对你问题。...就我个人而言,我不使用它,但是任何时候有人问到 JS 中不变性(immutability),大家都会指出 Immer,并且这可以加上 redux 或 React hooks。

14.4K40

React组件设计实践总结05 - 状态管理

是好处也是坏处, 对于团队初学者来说没有约束会导致风格不统一,无法控制项目熵增。好处是可以自定义自己约束 性能优化....它应用工作流如下: image.png 特性: 整合了 Redux 生态比较流行方案: immer(不可变数据变更),redux-saga(异步数据流处理),reselect(选取映射 state...对于 Redux 目前比较流行组合就是: immer+saga+reselect 二,太多模板代码。...如使用 saga 或 redux-promise 简化了不可变数据操作方式。 如使用 immer 简化 reducer。...这样一来 Windows 不需要学习 React 视图展示,我们也不需要关系他们复杂业务逻辑(底层还是使用 C++, 暴露部分接口给 node) 七,可能还有性能问题 Redux 常见问题:性能

2.1K31

使用Immer解决React对象深度更新痛点

),每次都不得不深拷贝整个对象;当对象特别大时候,深拷贝会导致性能问题。...为了解决这种问题Immer来了 Immer初登场 那么Immer是个啥呢,用官方的话说就是 Immer (German for: always) is a tiny package that allows...,我们通过Immer提供produce方法,可以直接像深拷贝那样,在新对象上做修改 更重要是,在 immer 背后做了性能优化,而不是简单全部深度拷贝,所以不用担心性能问题 Immer 优点...Immer有着许多便捷性能上优势: 遵循不可变数据范式,同时使用普通JavaScript对象、数组、集合映射,上手即用 开箱即用结构共享 开箱即用对象冻结 更新轻而易举 冗余代码更少 对JSON...break; default: break; } }, [ /* initial todos */ ] ); 以及配合Redux

69341

放弃Redux吧,转投Zustand吧

Zustand 是一个为 React 应用程序设计状态管理库,与其他流行状态管理库如 Redux MobX 相比,它提供了一些独特优势特性。...性能优化 Zustand 通过自动缓存状态值来减少不必要组件渲染,从而提高性能。它还解决了 Redux“死节点”问题,即在某些情况下,子组件可能无法正确更新问题。...此外,Zustand 通过使用 React 上下文钩子系统,避免了 Context loss 问题,这在某些复杂组件结构中可能会出现。 4....中间件支持 Zustand 支持大量中间件,如 ImmerRedux 中间件等,这使得开发者可以根据需要轻松地扩展 Zustand 功能。...调试开发体验 Zustand 提供了良好调试体验,它与 Redux DevTools 兼容,使得开发者可以轻松地检查调试状态变化。

36510

简洁 React 状态管理库 - Stamen

本文作者:IMWeb forsigner 原文出处:IMWeb社区 未经同意,禁止转载 说到 React 状态管理,必提肯定是 Redux 与 MobX,2018 年快过去了,它们依然是最火热状态管理工具...,也有一些基于 Redux ,如 dva、rematch 等,也有新,如 mobx-state-tree,这里不对各个解决方案作评价。...高效 更高开发效率,这很重要 Typescript state action 高度支持智能提示 我是个实用主义者,开发效率、代码可维护性可读性、开发体验大于各种什么范式、各种理论,也不需要装纯...有一天,我看到了 mobx 作者 immer, 我感觉使用 immer, 可以实现一个我理想中状态管理工具,所以就造了一个轮子,叫 stamen, 他有什么特点呢,Show you the code...如果有什么核心特点的话,那应该是 "简洁",这里指的是使用者写代码时简洁,可以专注于业务,而不是自身源代码简洁,把问题留给使用者。

1K30

干货 | Mvvm 前端数据流框架精讲

而就像 Redux 一样,Mvvm 框架中也出现了许多与框架解耦库,比如 Mobx、Immer、Dob 等,这些库需要一个中间层与框架衔接,比如 mobx-react、redux-box、dob-react...有问题自然有人会解决,Mobx 作者 Immer 库完美的解决了问题。 ? 原理是通过 proxy 返回代理对象,在内部通过浅拷贝替代对对象 mutable 更改。...具体原理可以参考我之前一篇文章《精读 Immer.js 源码》。 ?...(obj => obj.count++) } 上面这种看似 mutable 写法其实是零副作用纯函数,下面写法等价: typescript function inc(obj) { return {...Mvvm 与 Reactive programming 结合 既然 redux 可以与 rxjs 结合(redux-observable),那么 mvvm 应该也可以如此。

1.6K20

2022 年 React 生态

如果需要全局状态管理,可以选择加入 React 内置 useContext Hook 来将 props 从顶层组件传递到底层组件,从而避免 props 多层透传问题。...它允许你管理应用程序全局状态,任何连接到其全局存储 React 组件都可以读取修改这些状态。 如果你碰巧在用 Redux,你一定也应该查看 Redux Toolkit。...链接: React Router:https://reactrouter.com/ ---- 样式/CSS 在 React 中有很多关于 样式/CSS 选项意见,作为一个 React 初学者,可以使用一个带有所有...但是,如果你觉得需要强制执行不可变数据结构,那么最受欢迎选择之一是 Immer 。...链接: Immer:https://github.com/immerjs/immer ---- 国际化 当涉及到 React 应用程序国际化 i18n 时,你不仅需要考虑翻译,还需要考虑复数、日期货币格式以及其他一些事情

5.7K20

Redux Toolkit

它最初创建是为了帮助解决关于 Redux 三个常见问题: “配置 Redux 存储太复杂了” “我必须添加很多包才能让 Redux 做任何有用事情” “Redux 需要太多样板代码” 我们无法解决所有用例...安装 使用 React Redux 启动新应用程序推荐方法是使用官方 Redux+JS 模板或Redux+TS 模板来创建 React App,它利用了Redux Toolkit React Redux...Toolkit 包括以下 API: configureStore(): 包装createStore以提供简化配置选项良好默认值。...此外,它自动使用该immer库让您使用普通可变代码编写更简单不可变更新,例如state.todos[3].completed = true. createAction():为给定动作类型字符串生成动作创建函数...、切片名称初始状态值,并自动生成切片reducer,并带有相应动作创建者动作类型。

10710
领券