首页
学习
活动
专区
圈层
工具
发布

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

上一篇文章主要介绍了 redux 文档里所用到的基本优化方案,但是很多都是手工实现的,不够自动化。这篇文章主要讲的是怎么用 redux-toolkit 组织 redux 代码。...: {}} 结构 使用 redux-thunk 来做异步,手动返回函数 手动使用表驱动来替换 reducer 的 switch-case 模式 手动将 selector 进行封装成函数 手动引入 immer...异步 之前我们用 redux-thunk 都是 action creator 返回函数的方式来写代码,redux-toolkit 提供一个 createAsyncThunk 直接可以创建 thunk(其实就是返回函数的...createSlice 的另一个好处就是可以直接获取 action,不再需要每次都引入常量,不得不说,使用字符串来 dispatch 真的太 low 了。...直接使用字符串来 dispatch 是非常容易出错的,而且对 TS 非常不友好。

92220

Redux Toolkit

安装 使用 React 和 Redux 启动新应用程序的推荐方法是使用官方 Redux+JS 模板或Redux+TS 模板来创建 React App,它利用了Redux Toolkit和 React Redux...它可以自动组合你的 slice reducer,添加你提供的任何 Redux 中间件,redux-thunk默认包含,并启用 Redux DevTools Extension。...此外,它自动使用该immer库让您使用普通的可变代码编写更简单的不可变更新,例如state.todos[3].completed = true. createAction():为给定的动作类型字符串生成动作创建函数...createAsyncThunk: 接受一个动作类型字符串和一个返回承诺的函数,并生成一个pending/fulfilled/rejected基于该承诺分派动作类型的 thunk import { createAsyncThunk...reducer 和 selector 来管理 store 中的规范化数据 重新选择库中的createSelector实用程序,重新导出以方便使用。

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

    我是这样在 React 中实践 TDD 编程的

    在Redux中编写测试听起来肯定有悖直觉。如果你使用了Redux,它可能看起来更加复杂。 然而,在添加功能之前编写测试有助于编写更好的代码,因为你预先考虑了将使用的设计模式、体系结构和变量的名称。...编写测试 这是最有趣的部分。让我们开始TDD。 首先,让我们创建并配置存储。在src目录中,创建一个名为index.js的新目录。在这个文件中,初始化存储。...slice的默认状态应该是一个空数组,毕竟,我们处理的是用户。 让我们通过编写一个测试: 在src/store中创建一个名为slices的新目录。...在slice目录中,创建一个名为user.js的文件。...我们刚刚使用Redux、thunk和axios mock编写了一些测试 对你来说有点挑战吗?添加诸如删除用户、修改以及检索用户等功能。 结论 在本文中,我们快速介绍了使用Redux的TDD。

    2.7K30

    如何提高redux开发效率?当然是redux-tookit啦!

    # 什么是 redux-toolkit redux-toolkit 是官方推荐的编写 redux 逻辑的方法,简化了 redux 的配置过程,无需再创建 actions、reducer 的,更大程度方便使用...redux 仓库 # 基本使用 redux-toolkit 的使用步骤,可分为如下 5 步 1、安装 redex-toolkit 2、创建 slices 3、创建 store 4、将 Redux 连接到...使用Provider包裹 React 顶层组件,将 Redux store 对象传递给组件树中的所有组件,使得 Redux 的状态管理能够在整个应用程序中生效。...createAsyncThunk 创建一个异步 action,方法触发的时候会有三种状态: pending(进行中) fulfilled(成功) rejected(失败) export const getMovieData...// createAsyncThunk 创建一个异步action,方法触发的时候会有三种状态: // pending(进行中)、fulfilled(成功)、rejected(失败) export const

    53320

    Redux介绍及源码解析

    、Redux-Thunk)....(todoAdded);action creator 是一个纯函数, 是从 Flux 架构中出现的, 他是一种统一集中式管理 action 的思路, 为什么要使用 action creator ?..., 所以读起来要比 Flux 的源码轻松很多, 逻辑走向比较清晰, 可以学习学习其编程思维, 他导出的函数有如下几个:export { createStore, // 整体的Store创建函数, 不过现在推荐使用...store 就是通过该函数创建了, 是 Redux 中的核心函数, 函数中对主要的功能函数进行的定义, 并对一些属性进行初始化, 他定义如下/** * @param {Function} reducer...当然, 现在官方已经开始推荐使用 redux-toolkit, 他是基于 Redux 的最佳实践, 简化了 Redux 的编写调用, 他采用了函数式、柯里化等编程思维, 具体差异可以参考官方说明.

    2.7K20

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

    redux 文档除了一些概念的介绍,主要包含了 怎么只用 redux 这个库来组织 redux 代码 怎么用 redux-toolkit 的 API 更智能地组织 redux 代码 redux 文档之所以难以看懂是因为它不按线性的思维来写...第八版:使用 thunk 处理异步 上面说的都是数据层面上的操作,一直没有说异步处理。redux 不推荐在 reducer 里写发请求的代码。这些代码应该都放在 action creator 里的。...from 'redux-thunk' ......因此,为了更简便去写这些“模板代码”诞生了很多 redux 的库,redux 官方也推出了 redux-toolkit 这个库来方便开发者组织代码。...下一篇文章将会说怎么将上面的代码都换成 redux-toolkit 的推荐的写法,这个过程将会很爽,那下一篇文章见~

    2.1K20

    redux-thunk中间件

    redux-thunk是一种中间件,它能使你在action creator中返回函数,此返回函数就是thunk函数,模拟一下就是 // thunk函数 (dispatch,getState,extraCustomArgument...同样此thunk函数可以被dispatch,并且thunk函数的返回值也是dispatch的返回值,另外在action creator中也可以dispatch其他的thunk函数。...redux-thunk解决了什么问题 ---- 在基本的redux中,只能dispatch同步的action来更新state,那么对于dispatch异步的action来更新state呢?...就要使用中间件了,而redux-thunk就是这样一个中间件。...另一个就是传入extraCustomArgument参数。这一部分请直接参考redux-thunk官方文档。 可以看出,redux-thunk就是一个扩展功能的中间件,它的源代码实现非常少!

    64240

    第二十篇:从 Redux 中间件实现原理切入,理解“面向切面编程”

    那如果想要在 Redux 中引入异步数据流,该怎么办呢?Redux 官方给出的建议是使用中间件来增强 createStore。...下面我从出入参角度简单提取了一下 applyMiddleware 的源码框架: // applyMiddlerware 会使用“...”运算符将入参收敛为一个数组 export default function...从 Redux 中间件机制中,不难看出,面向切面思想在很大程度上提升了我们组织逻辑的灵活度与干净度,帮助我们规避掉了逻辑冗余、逻辑耦合这类问题。...总结 在这一讲,我们首先以 redux-thunk 中间件为例,从“异步工作流”场景切入,认识了 Redux 中间件的工作模式。...专栏的下一讲,我将以 React 的另一个“好帮手” React-Router 为切入点,为你讲解前端路由相关的知识,不见不散。

    63030

    Thunk函数的使用

    var x = 1; function s(y){ console.log(y + 1); // 3 } s(x + 1); 在上述的例子中,无论是使用传值调用还是使用传名调用,执行的结果都是一样的...,使用传名调用的话只将表达式传入而并未计算,只要在函数中没有用到x + 2这个表达式就不会计算,使用传值调用的话就会首先将x + 2的值计算然后传入,如果没有用到这个值,那么就多了一次没有必要的计算。...函数 Js中的求值策略是是传值调用,在Js中使用Thunk函数需要手动进行实现且含义有所不同,在Js中,Thunk函数替换的不是表达式,而是多参数函数,将其替换成单参数的版本,且只接受回调函数作为参数。...或者如果用的是yield*,则表示将执行权移交给另一个生成器函数(当前生成器暂停执行)。...,通过左边的变量接收Thunk函数中funct执行的参数,在使用Thunk函数进行自动流程管理时,必须保证yield后是一个Thunk函数。

    1.9K20

    5. 「snabbdom@3.5.1 源码分析」Thunks 函数

    介绍和使用 thunk 函数传入 一个选择器,一个 key 作为 thunk 的身份标识,一个返回 vnode 的函数,和一个 state 数组参数。...key 是可选的,但是当 selector 在同级 thunks 中不是唯一的时候则需要提供,这确保了在 diff 过程中 thunk 始终能正确匹配。...Thunks 是一种优化方法,用于【数据的不可变性】。 参考这个基于数字创建虚拟节点的函数。...节点来 patch 旧节点,这种操作是不必要的,我们可以使用 thunk 函数来避免上述操作。...这避免了在 diff 过程中重复创建数字视图。 这里的 view 函数仅仅是一个简单的示例,在实际使用中,thunks 在渲染一个需要耗费大量计算才能生成的复杂的视图时才能充分发挥它的价值。

    24520

    红队技巧--通过内存中PE执行绕过AV

    具体思路: 加密恶意软件并将其存储在内存中 解析DOS标头& 重新创建导入地址表 获取并跳转到新的入口点 加密方式我们选择多层的XOR,下面是对代码进行加密的代码: for (i = 0; i <...PIMAGE_IMPORT_DESCRIPTOR 这用于访问包含导入地址表(用于查找DLL的内存地址的查询表,当调用其他库中的函数时可以使用的信息)信息的结构。我们将使用它来获取名称。...恶意软件使用的DLL并使用该LoadLibraryA功能加载它们。...将DLL加载到我们自己的地址空间后,我们需要遍历并使用它GetProcAddress来获取恶意软件所需功能的正确新地址,并在IAT中添加对其的引用。...PIMAGE_THUNK_DATA 这将为我们提供被恶意软件调用的每个函数的名称,一旦有了这些名称,我们就可以使用GetProcAddress它们从它们所在的DLL中获取地址,然后将正确的新地址添加到

    82620

    Java直接内存分配和释放的讲解

    前言 直接内存是分配在JVM堆外的,那JVM是怎么对它进行管理的呢?本文主要介绍一下在Java中,直接内存的空间分配和释放的机制。 直接内存和堆内存的比较 在比较两者的性能时,我们分两方面来说。...堆内存的申请是直接从已分配的堆空间中取一块出来使用,不经过内存申请系统调用,而直接内存的申请则需要本地方法通过系统调用完成。 而为什么在IO读写时,直接内存比较快?因为直接内存使用的是零拷贝技术。...直接内存的最大大小可以通过-XX:MaxDirectMemorySize来设置,默认是64M 直接内存的分配和释放 在Java中,分配直接内存有三种方式: Unsafe.allocateMemory()...一个是Bits类里面的reserveMemory,另一个是Cleaner创建的Deallocator。...所以如果你使用native方法来操作直接内存的话,也需要使用native方法来自己进行直接内存的管理。

    1.1K40

    【前端】闭包(closure)

    函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。...在JavaScript,函数在每次创建时生成闭包。...而 JavaScript 没有这种原生支持,但我们可以使用闭包来模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。...传名调用的好处是使用时计算,不浪费资源。 个人理解,核心在于 延迟——必要的时候才做必要的事 2.3.2....JS 中的 Thunk Javascript 本身是就是【传值调用】,在 JS 中 thunk 函数主要用于延迟callback 的执行。

    95730
    领券