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

redux你用对了吗?

使用纯函数来执行修改: 为了描述 action 如何改变 state tree ,你需要编写 reducers 关于第一点很容易理解,整个应用应当只有一个 store,全局唯一的 store 有利于更好的管理全局的状态...add(a, b) { return a + b; } foo(1, 2); // 3 现在的函数就是一个纯函数,因为函数 add 的返回值永远只依赖他的入参 a 和 b,不管外部变量 x 的值如何变化...immer 上面我们已经分析了 redux 里面的 reducer 为什么要返回一个全新的 state,但是,如果按照上面 reducer 的写法,要修改的 state 树层级深了之后,修改起来无疑是非常麻烦的...当然,除了 immer 之外,还有别的库也同样能解决我们的问题,但是 immer 应该是最简单也是最容易上手的一个库之一了。...源码角度分析了需要返回全新state的原因,最后引入了immer库,引入了 immutable 概念,redux 配合 immer 可以方便我们便捷高效的用好 redux

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

精读《Immer.js》源码

本周精读的仓库是 immer。 1 引言 Immer 是最近火起来的一个项目,由 Mobx 作者 Mweststrate 研发。...immutable state by mutating the current one. 3 精读 虽然笔者之前在这方面已经有所研究,比如做出了 Mutable 转 Immutable 的库:dob-redux...,但 Immer 实在是太惊艳了,Immer 是更底层的拼图,它可以插入到任何数据流框架作为功能增强,不得不赞叹 Mweststrate 真的是非常高瞻远瞩。...所以笔者认真阅读了它的源代码,带大家原理角度认识 ImmerImmer 是一个支持柯里化,仅支持同步计算的工具,所以非常适合作为 redux 的 reducer 使用。...4 总结 读到这,如果觉得不过瘾,可以看看 redux-box 这个库,利用 immer + redux 解决了 reducer 冗余 return 的问题。

60230

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

而就像 Redux 一样,Mvvm 框架中也出现了许多与框架解耦的库,比如 Mobx、Immer、Dob 等,这些库需要一个中间层与框架衔接,比如 mobx-react、redux-box、dob-react...二、 TFRP 到 mvvm 讲到 mvvm 的原理,先从 TFRP 说起,详细可以参考《dob-框架实现》,该文以 dob 框架为例子,一步步介绍了如何实现 mvvm。本文简单做个介绍。...4、无数据快照 mutable 最被人诟病的一点就是无法做数据快照,不能像 redux 一样做时间回溯。有问题自然有人会解决,Mobx 作者的 Immer 库完美的解决了问题。 ?...具体原理可以参考我之前的一篇文章《精读 Immer.js 源码》。 ?...自从有了 Immer.js 之后,至少支持元编程的角度来看,mutable 并不一定会产生副作用,它可以是零副作用的: typescript function inc(obj) { return produce

1.6K20

精读《重新思考 Redux

作者 6 个角度阐述了基于 redux 的框架需要解决什么问题。...内置了比较多的插件 rematch 将常用的 reselect、persist、immer 等都集成为了插件,相对比较强化插件生态的概念。...比如 rematch-immer 插件,可以用 mutable 的方式修改 store: const count = { state: 0, reducers: { add(state)...{ state += 1; return state; } } }; 但是当 state 为非对象时,immer 将不起作用,所以最好能养成 return state...4 总结 重复一下作者提出工具质量的公式: 工具质量 = 工具节省的时间/使用工具消耗的时间 如果一个工具能节省开发时间,但本身带来了很大使用成本,在想清楚如何减少使用成本之前,不要急着用在项目中,这是我得到的最大启发

43920

为什么说 90% 的情况下,immer 能完胜 immutable?

这样写: immer 这样写: 没有对比就没有伤害,使用体验上,immer 完胜。...而 immer 没有自己的数据结构,它只是通过 Proxy 实现了代理,内部自动创建新的对象: 只不过是把手动创建新对象的过程通过代理给自动化了: 所以性能上来说,如果有特别大的 state 的话...此外,immutable 在 redux 里也很有用的: 用 immutable 的话是这样写: const initialState = fromJS({}) function reducer(state...redux 的角度来看,也是 immer 在体验上完胜。...使用体验上来说,不管是和 react 的 setState 结合还是和 redux 的 reducer 结合,都是 immer 完胜,但是 immutable 因为有专用数据结构的原因,在有大 state

42020

redux 文档到底说了什么(下)

上一篇文章主要介绍了 redux 文档里所用到的基本优化方案,但是很多都是手工实现的,不够自动化。这篇文章主要讲的是怎么用 redux-toolkit 组织 redux 代码。...export const SET_TODOS = 'setTodos' export type SET_TODOS = typeof SET_TODOS 以前的做法 手动配置常用中间件和 Chrome 的 dev...来做异步,手动返回函数 手动使用表驱动来替换 reducer 的 switch-case 模式 手动将 selector 进行封装成函数 手动引入 immer,并使用 mutable 写法 以前的写法理解起来真的不难...注意:createSlice 里的 reducer 里可以直接写 mutable 语法,这里其实是内置了 immer。...市面上还有很多诸如 redux-action, redux-promise, reduce-reducers等等的 redux 衍生品(redux 都快变一个 IP 了)。

75120

【React】211- 2019 React Redux 完全指南

学习 Redux,从简单 React 开始 我们将采用增量的方法,带有组件 state 的简单 React 应用开始,一点点添加 Redux,以及解决过程中遇到的错误。...我整理了一个如何Redux 里做 Immutable 更新完全指南,包含更新 state 中对象和数组的七个通用模式。 安装 Immer 在 reducers 里面使用也是一种很好的方式。...Immer 让你可以像写普通 mutable 代码一样,最终会自动生成 immutable 代码。点击了解如何使用 Immer。 建议:如果你是开始一个全新的应用程序,一开始就使用 Immer。...如何在 React 中使用 Redux 此时我们有个很小的带有 reducer 的 store,当接收到 action 时它知道如何更新 state。...如何使用 React Redux connect 你可能注意到这个调用看起来有点……奇怪。

4.2K20

React-全局状态管理的群魔乱舞

React 本身并没有为如何解决全局状态管理提供任何强有力的指导方针。因此,随着时间的推移,React 生态系统收集了许多方法和库来解决这个问题。 如何从中挑选这些库,变的让人捉摸不透。...「props失效」问题 「孤儿」问题 ❞ 组件树的任何地方读取存储的状态 「这是状态管理库的最基本功能」。...这就是为什么像Immer[5]这样的库很受欢迎,它允许开发者编写可变风格的代码。...此时,对应用如何「高效的解耦」就变成了一个项目中需要解决的问题了。 不再强调Redux的作用 随着我们遇到更多这样的痛点,在启动一个新项目时默认使用 Redux 的做法变得不受欢迎。...❝通过hook,我们可以具有巨大全局存储的「单体状态管理」转变为向自下而上的 「微状态管理」,通过hook消费更小的状态片。

3.7K20

2020 年你应该知道的 React 库

如何开始 React 如果你是一个完全不熟悉 React 的初学者想创建一个 React 项目,加入 React 的世界。有许多工具包项目可以选择,每个项目都试图满足不同的需求。...如果您只是想了解这些初学者工具包如何工作的,那么可以尝试从头开始设置 React 项目。你将从一个基本的 HTML 和 JavaScript 项目开始,然后自己添加 React 和它的支持工具。...它甚至可以模拟 Redux(Redux 是 React 的一个流行的状态管理库)。 所有 React 的内置 hooks 都非常适合本地状态管理。...但是,如果您和您的团队认为有必要实施不可变的数据结构,最流行的选择之一是 Immer。...就我个人而言,我不使用它,但是任何时候有人问到 JS 中的不变性(immutability),大家都会指出 Immer,并且这可以加上 redux 或 React hooks。

14.4K40

Redux 做状态管理,真的很简单🦆!

可调试: Redux DevTools 让你 轻松追踪 到 应用的状态在何时、何处以及如何改变。Redux 的架构会记下每一次改变,借助于 "时间旅行调试",你甚至可以把完整的错误报告发送给服务器。...: { value: 0, }, reducers: { increment: (state) => { state.value += 1; // 这里默认通过了 immer...TypeScript 类型相关[3] 3.2 Redux 的状态变更 如果对 Redux 的状态更新过程和原理感兴趣,这里十分推荐阅读: Redux如何实现state变化触发页面渲染?...参考资料 [1]create-react-app: https://create-react-app.dev [2]@redux/tookit 的 API 使用手册: https://redux-toolkit.js.org.../usage-with-typescript [4]Redux如何实现state变化触发页面渲染?

3.4K40

Vite2+React+TypeScript:搭建企业级轻量框架实践

既然迁移过来了,也借着空闲时间给大家介绍下一个 Vite2 + React + TypeScript 的项目中, 如何合理搭建和使用周边插件,以及让他们组合到整个工程中去,也欢迎大家阅览和补充更优想法。...Redux Toolkit React的状态管理库历来就是轮子重灾区,各种设计模式层出不穷,这里就不多介绍了。...本项目选用Redux Toolkit作为项目管理,一来,它在众多产品中算是比较优秀的一个框架,使用起来也简单、结构清晰;二来,它封装了immer,写起异步逻辑挺方便的,用起来也可以应对大多数情景。...路由配置 │   ├── types ts类型定义 │   ├── store 状态管理 │   └── utils 基础工具包...import { visualizer } from 'rollup-plugin-visualizer'; import path from 'path'; // https://vitejs.dev

1.8K10

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

对于 Redux 目前比较流行的组合就是: immer+saga+reselect 二,太多模板代码。...如使用 saga 或 redux-promise 简化了不可变数据的操作方式。 如使用 immer 简化 reducer。...我为什么 Redux 迁移到了 Mobx Mobx 与 Redux 的性能对比 总结 本节主要介绍的 Redux 设计的动机,以及围绕着这个动机一系列设计, 再介绍了 Redux 的一些缺点和最佳实践...扩展阅读 Redux 有什么缺点 知乎上的吐槽 Redux 状态管理之痛点、分析与改良 Redux 有哪些最佳实践? 如何评价数据流管理架构 Redux?...举一个简单的例子: image.png 但是Mobx 不是一个框架,它不会像 Redux 一样告诉你如何去组织代码,在哪存储状态或者如何处理事件, 也没有最佳实践。

2.1K31
领券