更新 Redux 至 v4.x 后,它的改变有哪些?

Redux 是一个非常流行的状态管理库,它的稳定性和可靠性一直备受开发者的认可和青睐。最近,Redux 发布了一个新的版本——v4.x,这个版本相比于之前的版本更加稳定且有了很多的重大改动。本文将会详细的探讨 Redux 至 v4.x 版本的改变。

1. 引入 Redux Toolkit

Redux Toolkit 是一个为 Redux 提供的官方工具集,它的引入大大简化了Redux应用的模板代码。通过 Redux Toolkit,你可以快速、简单地进行状态的管理,而无需编写大量的样板代码。它主要提供了以下功能:

  • createSlice:快速定义 Reducer 和 Action
  • createAction:快速创建 Action
  • createAsyncThunk:利用 Promise 处理异步请求
  • createEntityAdapter:可用于操作实体数据的实用程序函数集合

2. 类型改进

Reduxv4.x中引入了一些新的类型改进和增强,包括:

  • TypeScript 支持改进:Reduxv4.x 现在与 TypeScript 更紧密地集成,你可以通过使用 TypeScript 进行更准确地类型检查。
  • TypeScript 泛型支持:Reduxv4.x 提供了针对每个常见的 Redux API 的 TypeScript 泛型支持,这样就可以更好地应用类型推断和错误检查。
  • PayloadAction 类型:这个类型现在是 Reducer 创建时最常用的传递操作有效载荷的方式。Reduxv4.x 为PayloadAction类型添加了属性,以提高类型可用性。
  • createAsyncThunk 中的rejectedPayload属性:该属性是createAsyncThunk 的一个重要新属性,可以在返回错误后向 Redux存有限数据作为有效负载。

3. state共享更加灵活

在 Redux v4.x 中,使用 combineReducers 函数合并 reducers 时的行为有所改变。旧的合并方式不允许在根状态树中重新定义子状态的键。在 v4.x 版本中,你可以在 createSlice 中传递新的 name 参数,它会为你创建状态特定的 reducer 和 action type 前缀,并且支持在 Redux 状态树中重新设置状态的 key。

举个例子,你原本可能会编写以下代码,使用 combineReducers 函数将不同的 Reducer 组合在一起:

------ - --------------- - ---- --------
------ ------------ ---- ----------
------ ----------------------- ---- ---------------------

----- ----------- - -----------------
  ------ -------------
  ----------------- ------------------------
---

------ ------- ------------

在 v4.x 版本中,你可以使用 createSlice 函数返回的 reducer,使用 name 参数为每个 reducer 设置唯一的名称:

------ - ----------- - ---- -------------------

----- ---------- - -------------
  ----- --------
  ------------- ---
  --------- -
    -------- ------- ------- -- -
      ---------------------------
    --
  --
---

----- --------------------- - -------------
  ----- -------------------
  ------------- -----------
  --------- -
    -------------------- ------- ------- -- -
      ------ ----------------------
    --
  --
---

------ ----- - ------- - - -------------------
------ ----- - ------------------- - - ------------------------------

------ ----- ----------- - -
  ------ -------------------
  ----------------- ------------------------------
--

上述代码中的createSlice 函数生成了 todosSlice.reducervisibilityFilterSlice.reducer 两个 reducer 以及 addTodosetVisibilityFilter 两个 action。这种方式使得createSlice 中的抽象变得更加简单,可以在组件层次上更方便地组织状态。

4. 性能大幅提升

相比于之前的版本,Redux v4.x 的性能有了非常大的提升。这得益于许多不断改进和精细调整后的内部实现细节。Redux v4.x 可以在现代浏览器和 Node.js 上运行得更快。如果你在之前使用 Redux 时因性能问题而犯愁,那么升级至 v4.x 版本应该是你的不二之选。在实际开发中Redis v4.x的提高性能能极大的加速应用中状态管理的开发和生产,并提高组件渲染速度。

5. 总结

Redux v4.x 有很多改进和新的特性。引入 Redux Toolkit,类型改进, 对 state 共享方式的灵活性做出调整,性能提升等是开发者最关注的方面。随着时间的推移,Redux 会成为前端应用的必备工具之一。我们可以看出 Redux 的发展已经非常的完善,涵盖了业界中大部分的需求和使用场景。本文旨在提出升级至 v4.x 的价值和必要性,希望能够更好地指导 Redux 应用的开发和生产工作的进行。

完整示例代码可以查看下面的 Github 链接:

https://github.com/reduxjs/redux/releases/tag/v4.0.0

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6529090f7d4982a6ebb9c0f9


猜你喜欢

  • 在我使用 Mocha 测试套件时,“describe” 函数没有起作用? - 解决方案

    在我使用 Mocha 测试套件时,“describe” 函数没有起作用? - 解决方案 著名的 JavaScript 测试框架 Mocha 是前端开发过程中必不可少的工具之一。

    1 年前
  • 「教程」socket.io 与 express 框架的结合

    前言 随着 Web 应用程序的发展,实时通信的需求也越来越多。在传统的 Web 技术中,通过 AJAX 轮询或长轮询(long-polling)来模拟实时通信。但是,这些方案都有性能和实时性的问题。

    1 年前
  • Next.js 项目出现 “Module not found: Error: Can't resolve” 的问题该怎么办?

    引言 在 Next.js 项目中,很常见的错误就是出现了 “Module not found: Error: Can't resolve” 的错误。这个错误通常是由文件路径或者依赖项配置不正确所引起的...

    1 年前
  • 在 Angular 组件中查看 / 编辑父组件的属性

    在 Angular 开发中,父子组件的概念是非常常见的。而有时候,我们需要在一个子组件中访问或者修改其父组件的属性,本文将介绍如何实现该功能。 查看父组件的属性 通常,我们可以通过 @Input() ...

    1 年前
  • Redux middleware 简单实现,了解 redux-saga 原理

    前言 在 Redux 开发中,我们经常要处理异步请求、副作用等,这就需要我们使用 Redux 中间件来进行处理。Redux 中间件是一种增强 Redux 的处理方式,它可以在 action 发送到 r...

    1 年前
  • 如何在 Mongoose 中使用 $each 操作符批量添加文档?

    Mongoose 是一个流行的 MongoDB ODM(对象文档映射),熟练掌握其强大的功能可以使前端开发人员更有效地操作数据库。在 Mongoose 中,有时需要批量添加文档到数据库中,这时候就可以...

    1 年前
  • Flexbox 实现响应式布局:使用 media query 和 flex-wrap

    随着移动设备的普及,响应式布局已经成为了前端开发的必备技能。Flexbox 是一种强大的布局方法,可以方便地实现响应式布局。本文将介绍如何使用 media query 和 flex-wrap 实现响应...

    1 年前
  • MongoDB 的查询优化技巧分享

    MongoDB 是一款非关系型数据库,由其灵活性和高性能在前端领域得到广泛应用。在一些数据量较大的应用场景下,如何优化查询是一个非常重要的问题。本文将分享一些 MongoDB 查询优化的技巧,希望对前...

    1 年前
  • ESLint 如何检测代码中的死代码

    作为前端开发,我们经常会在项目代码中遇到死代码的情况,也就是那些永远都不会被执行的代码段。这些死代码会影响代码的可维护性,也会对项目的性能造成一定的影响。为了避免这些问题,我们可以使用 ESLint ...

    1 年前
  • Hapi 框架中插件开发的技巧与注意事项

    Hapi 是一款 Node.js 的 Web 框架,它具有强大的插件系统,很多功能都是通过插件来实现的。因此,插件开发是 Hapi 框架中重要的一部分,本文将介绍插件开发的技巧和注意事项,帮助大家更好...

    1 年前
  • 如何利用 Deno 的模块缓存提高程序性能

    Deno 是一款新的 JavaScript 和 TypeScript 运行时环境,作为现代的跨平台构建工具,Den它非常适合前端、后端等各种场景使用。而在 Deno 的模块缓存方面,使用得当将能够显著...

    1 年前
  • React 组件 unit-test 之使用 Enzyme 做浅渲染 (shallow)

    在前端开发中,React 已经成为了一个非常流行的前端框架,它的组件化开发方式使得前端开发更加方便,让我们可以轻松地将应用程序拆分成更小的、可重复使用的部分。 然而,React 的组件化开发方式也给测...

    1 年前
  • 利用 GraphQL 在 Headless CMS 中实现高效的数据交换

    在现代的 Web 开发中,Headless CMS 应用越来越流行。Headless CMS 是指一个内容管理系统,将前端和后端分离,它只负责内容管理和数据存储,不负责前端页面的渲染。

    1 年前
  • Kubernetes 集群中时间同步导致节点时钟不准的解决方法

    在 Kubernetes 集群中,各个节点运行着多个不同的容器,这些容器之间需要进行网络通信和协作,因此时间同步非常重要。然而,如果集群中的节点时间没有进行同步,就会导致节点时钟不准,而这种情况可能会...

    1 年前
  • 使用 Babel 将 ES6 编译为 ES5

    使用 Babel 将 ES6 编译为 ES5 随着前端技术的不断发展,ES6 (ECMAScript 6)作为 ECMAScript 最新版本,已经成为了不可忽视的一部分。

    1 年前
  • 排坑记录:PM2 进程断网或 IP 变更如何应对?

    问题背景 近期在使用 PM2 管理 Node.js 服务时,出现了一个比较诡异的问题:当服务器的 IP 地址变更或者服务器断网时,PM2 管理的进程无法正常工作。这很明显是因为进程与服务器的连接断开了...

    1 年前
  • Koa 错误处理技巧:解决 “Koa session not working” 问题

    Koa 是一个 Node.js 框架,它提供了许多方便的中间件函数来处理 HTTP 请求。其中 Koa-session 是一个用于处理 session 的中间件函数,它可以让你在你的应用程序中轻松地处...

    1 年前
  • RESTful API 中如何实现数据的批量操作

    RESTful API 中如何实现数据的批量操作 在 RESTful API 开发中,数据的批量操作是非常常见的需求,因为在实际业务中往往需要对多个数据进行同一种处理。

    1 年前
  • Vue.js 中使用 vue-i18n 库实现多语言切换的方式

    在全球化的背景下,一个良好的应用程序在使用过程中应该支持多种语言或文化。Vue.js作为一种流行的JavaScript框架,提供了vue-i18n这个非常方便的工具包,可以快速实现多语言切换。

    1 年前
  • 将 Vue.js 和 Server-Sent-Events 用于实时更新应用程序状态

    在现代 Web 应用程序中,实时更新应用程序状态是非常重要的。在这个过程中,我们可以使用 Vue.js 和 Server-Sent-Events(SSE)来实现。 本文将介绍如何使用 Vue.js 和...

    1 年前

相关推荐

    暂无文章