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

手写Redux-Saga源码

Redux-Sagacall这个effect,这样做可以让我们写单元测试变得更简单,为什么会这样,我们后面讲源码时候再来仔细看看。...整个Redux-Saga运行和原本Redux并不冲突,Redux甚至都不知道他存在,他们之间耦合很小,只在需要时候通过put发出action来进行通讯。...中间件对应源码可以看这里:github.com/redux-saga/… runSaga runSaga其实才是真正sagaMiddleware.run,通过前面的分析,我们已经知道他作用是接收Generator...,通过他类型获取对应处理函数,然后进行处理,我这里代码简化了,只支持IO这种effect,官方源码中还支持promise和iterator,具体可以看看他源码:github.com/redux-saga...但是如果你使用Redux-Sagaeffect,每次你代码运行时候得到都是一个任务描述对象,这个对象是稳定,不受运行结果影响,也就不需要针对这个造测试数据了,大大减少了工作量。

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

2022社招react面试题 附答案

保存数据,数据变化后⾃动处理响应操作 redux使⽤不可变状态,这意味着状态是只读,不能直接去修改它,⽽是应该返回⼀个新状态,同时使⽤纯函数;mobx中状态是可变,可以直接对其进⾏修改 mobx...redux-thunk优点: 体积⼩:redux-thunk实现⽅式很简单,只有不到20⾏代码; 使⽤简单:redux-thunk没有引⼊像redux-saga或者redux-observable额外范式...try/catch语法直接捕获处理; 功能强⼤:redux-saga提供了⼤量Saga辅助函数和Effect创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤; 灵活:redux-saga可以将多个...Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow; 易测试,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等。...redux-saga缺陷: 额外学习成本:redux-saga不仅在使⽤难以理解generator function,⽽且有数⼗个API,学习成本远超reduxthunk,最重要是你额外学习成本是只服务于这个库

2.1K10

一天梳理完react面试高频题

react文档第一条就是声明式,React 使创建交互式 UI 变得轻而易举。为应用每一个状态设计简洁视图,当数据改变时 React 能有效地更新并正确地渲染组件。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试...,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等redux-saga缺陷:额外学习成本: redux-saga不仅在使⽤难以理解 generator function,⽽且有数⼗...状态,通过当前state状态 和变更前 state 状态进行比较,从而确定是否调用 this.setState()方法触发Connect及其子组件重新渲染

4.1K20

Redux:从action到saga

前端应用消失部分 一个现代、使用了redux前端应用架构可以这样描述: 一个存储了应用不可变状态(state)store 状态(state)可以被绘制在组件里(html或者其他东西)。...这个绘制方法通常是简单而且可测试(并不总是如此)纯方法。...const render = (state) => components 组件可以给store分发action 使用reducer这种纯方法来根据就状态返回新状态 const reducer = (...使用这个方式会很快导致action生成方法变得复杂并难以测试。这个时候就需要redux-saga了。在redux-sagasaga就是一个可声明组织良好副作用实现方式(超时,API调用等等。。)...现在,测试这个saga就非常容易了: import { call, put } from 'redux-saga'; const mySaga = loadTodos(); const myTodos

1.2K00

美团前端react面试题汇总

(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试...,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等redux-saga缺陷:额外学习成本: redux-saga不仅在使⽤难以理解 generator function,⽽且有数⼗...ownProps 组件通过props传入参数。reducer 到组件经历过程:reducer对action对象处理,更新组件状态,并将新状态值返回store。..._updateProps()); // 加入_updateProps()至store里监听事件列表 } // 执行action后更新props,使组件可以更新至最新状态(类似于

5.1K30

redux-saga_pub culture

拿到后端返回状态 (promise so easy…) 隐藏提示信息 (这个有点难度,不过难不倒我,我给组建加一个控制属性) 更新redux store (dispatch咯。。。)...语法,稍后有介绍) 拿到后端返回状态 更新redux store (dispatch一下) 3265839-1e5cf739fe7c1784.jpg redux-saga-01.jpg 可以看到在使用了...Saga后,react只负责数据如何展示,redux来负责数据状态和绑定数据到react,而Saga处理了大部分复杂业务逻辑。...通过这个改变,前端应用代码结构更加清晰,业务层可复用部分增加。当然,Saga对自动化测试也支持很好,可以将逻辑单独使用自动化脚本测试,提高项目质量。...这句话使我决定了尝试用saga或thunk来实践把前端分层设想。

1.4K10

高级前端react面试题总结

Redux 请求中间件如何处理并发使用redux-Saga redux-saga是一个管理redux应用异步操作中间件,用于代替 redux-thunk 。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试...,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等redux-saga缺陷:额外学习成本: redux-saga不仅在使⽤难以理解 generator function,⽽且有数⼗...这里调用更新状态是安全,并不会触发额外render调用。

4K40

【Web技术】639- Web前端单元测试到底要怎么写?

设计模式与结构分析 在这个场景设计开发中,我们严格遵守 redux 单向数据流 与 react-redux 最佳实践,并采用 redux-saga 来处理业务流, reselect 来处理状态缓存,通过...saga 是一种 es6 生成器函数 - Generator ,我们利用他来产生各种声明式 effects ,由 redux-saga 引擎来消化处理,推动业务进行。...组合好参数并调用对应 api 层。 如果正常返回结果,则发送成功 action 通知 reducer 更新状态。 如果错误返回,则发送错误 action 通知 reducer。...这个测试用例步骤就是利用生成器函数一步步产生下一个 effect ,然后断言比较。 从上面的注释 3、4 可以看到, redux-saga 还提供了一些辅助函数来方便处理分支断点。...这也是我选择 redux-saga 原因:强大并且利于测试。 api 和 fetch 工具库 接下来就是api 层相关了。

3K30

React 单元测试策略及落地

在实际项目上副作用还有其他中间层进行处理,比如 redux-thunk、redux-promise 等,本质是一样,只不过 saga测试性上要好一些。这一层副作用怎么测试呢?...; 允许仅对真正关心、有价值业务进行测试; 支持不改动业务行为重构; 于是,我们发现官方提供了这么一个跑测试工具,刚好可以用来完美满足我们需求:runSaga。...基于这个发现,我们推出了我们第二版 saga 测试方案:runSaga + 自定义拓展 jest expect 断言。...中取得了正确参数 map 过 props 是否正确地被传递给了组件 redux 对应数据切片更新时,是否会使用新 props 触发组件进行一次更新 这四个点,react-redux 已经都帮你测过了...一般来说,我们期望 util 都是纯函数,即是不依赖外部状态、不改变参数值、不维护内部状态函数。这样函数测试效率也非常高。测试原则跟前面所说也并没什么不同,不再赘述。

1.1K20

前端二面高频react面试题集锦_2023-02-23

react文档第一条就是声明式,React 使创建交互式 UI 变得轻而易举。为应用每一个状态设计简洁视图,当数据改变时 React 能有效地更新并正确地渲染组件。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...: redux-saga提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤ 灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀...个⾮常实⽤异步flow 易测试,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等 redux-saga缺陷: 额外学习成本: redux-saga不仅在使⽤难以理解 generator...为了使整个更新过程可随时暂停恢复,节点与树分别采用了 FiberNode 与 FiberTree 进行重构。fiberNode 使用了双链表结构,可以直接找到兄弟节点与子节点。

2.8K20

高频React面试题及详解

,我们可以通过引入event模块进行通信 全局状态管理工具: 借助Redux或者Mobx等全局状态管理工具进行通信,这种工具会维护一个全局状态中心Store,并根据不同事件产生新状态 React有哪些优化性能是手段...保存数据,数据变化后自动处理响应操作 redux使用不可变状态,这意味着状态是只读,不能直接去修改它,而是应该返回一个新状态,同时使用纯函数;mobx中状态是可变,可以直接对其进行修改 mobx...当然mobx和redux也并不一定是非此即彼关系,你也可以在项目中用redux作为全局状态管理,用mobx作为组件局部状态管理器来用. redux中如何进行异步操作?...功能孱弱: 有一些实际开发中常用功能需要自己进行封装 redux-saga优点: 异步解耦: 异步操作被被转移到单独 saga.js 中,不再是掺杂在 action.js 或 component.js...,开发者无须封装或者简单封装即可使用 灵活: redux-saga可以将多个Saga可以串行/并行组合起来,形成一个非常实用异步flow 易测试,提供了各种case测试方案,包括mock task,

2.4K40

React saga_react获取子组件ref

redux-saga简介 Redux-sagaRedux一个中间件,主要集中处理react架构中异步处理工作,被定义为generator(ES6)形式,采用监听形式进行工作。...redux-saga安装 使用npm进行安装: npm install --save redux-saga 或者使用yarn: yarn add redux-saga redux-saga常用方法解释...(1)声明式Effect redux-saga中最大特点就是提供了声明式Effect,声明式Effect使得redux-saga监听原始js对象形式action,并且可以方便单元测试,我们一一来看...这个描述对象包含了所需要调用方法和执行方法时实际参数,我们认为只要描述对象相同,也就是说只要调用方法和执行该方法时实际参数相同,就认为最后执行结果肯定是满足预期,这样可以方便进行单元测试,...通过转化effects函数,可以方便进行单元测试 完善和严谨流程控制,可以较为清晰控制复杂逻辑。

4.5K30

前端react面试题(必备)2

React 将 render 函数返回虚拟 DOM 树与老进行比较,从而确定 DOM 要不要更新、怎么更新。...和解(reconciliation)最终目标是以最有效方式,根据这个新状态更新UI。...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试...,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等redux-saga缺陷:额外学习成本: redux-saga不仅在使⽤难以理解 generator function,⽽且有数⼗

2.3K20

前端高频react面试题

如果每次调用 setState都进行一次更新,那么意味着render函数会被频繁调用,界面重新渲染,这样效率是很低;最好办法应该是获取到多个更新,之后进行批量更新;如果同步更新了state,但是还没有执行...(1)使用react-thunk中间件redux-thunk优点:体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码使⽤简单: redux-thunk没有引⼊像redux-saga或者...提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀个⾮常实⽤异步flow易测试...,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等redux-saga缺陷:额外学习成本: redux-saga不仅在使⽤难以理解 generator function,⽽且有数⼗...React 将 render 函数返回虚拟 DOM 树与老进行比较,从而确定 DOM 要不要更新、怎么更新

3.3K20

每日两题 T35

redux redux是 JavaScript 状态容器,提供可预测化状态管理。 应用中所有的 state 都以一个对象树形式储存在一个单一 store 中。...redux-saga redux-saga 是一个用于管理应用程序 Side Effect(副作用,例如异步获取数据,访问浏览器缓存等) library,它目标是让副作用管理更容易,执行更高效,测试更简单...redux-saga 使用了 ES6 Generator 功能,让异步流程更易于读取,写入和测试。...不同于 redux thunk,你不会再遇到回调地狱了,你可以很容易地测试异步流程并保持你 action 是干净。...redux-saga与其他redux中间件比较 •redux-thunk 缺点在于api层与store耦合,优点是可以获取到各个异步操作时期状态值,比较灵活,易于控制 •redux-promise优点是

75630

深入理解 redux 数据流和异步过程管理

一般来说,除了某部分状态数据是只有某个组件关心,我们会把状态数据放在组件内以外,业务数据、多个组件关心状态数据都会放在 store 里面。...redux saga 异步过程管理就是这样:先把 action 透传给 store,然后判断 action 是否是被 taker 监听,如果是,则调用对应 worker saga 进行处理。...那么具体怎么执行就可以随意切换了,这样测试时候只需要模拟传入对应数据,就可以测试 worker saga 了。...所以 redux-saga 可以做复杂异步过程管理,而且具有很好测试性。...但是 redux-saga 优点还有基于 generator 良好测试性,而且大多数场景下,redux-saga 提供异步过程处理能力就足够了,所以相对来说,redux-saga更多一些

2.4K10

百度前端高频react面试题(持续更新中)_2023-02-27

这种组件在React中被称为受控组件,在受控组件中,组件渲染出状态与它value或checked属性相对应,react通过这种方式消除了组件局部状态使整个状态可控。...redux异步流中间件其实有很多,当下主流异步中间件有两种redux-thunk、redux-saga。...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...: redux-saga提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤ 灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来,形成⼀...个⾮常实⽤异步flow 易测试,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等 redux-saga缺陷: 额外学习成本: redux-saga不仅在使⽤难以理解 generator

2.3K30

2022社招React面试题 附答案

来担任,store只做存储,中间人,当Reducers更新完成以后会通过store订阅来通知react component,组件把新状态重新获取渲染,组件中也能主动发送action,创建action...(1)使用react-thunk中间件 redux-thunk优点: 体积⼩: redux-thunk实现⽅式很简单,只有不到20⾏代码 使⽤简单: redux-thunk没有引⼊像redux-saga...功能强⼤: redux-saga提供了⼤量Saga 辅助函数和Effect 创建器供开发者使⽤,开发者⽆须封装或者简单封装即可使⽤ 灵活: redux-saga可以将多个Saga可以串⾏/并⾏组合起来...,形成⼀个⾮常实⽤异步flow 易测试,提供了各种case测试⽅案,包括mock task,分⽀覆盖等等 redux-saga缺陷: 额外学习成本: redux-saga不仅在使⽤难以理解 generator...但是Redux状态更改可回溯——Time travel,数据多了时候可以很清晰知道改动在哪里发生,完整提供了一套状态管理模式。

2K50
领券