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

redux-saga

作为一个Redux中间件,想让Redux应用中的副作用(即依赖/影响外部环境的不纯的部分)处理起来更优雅 二.设计理念 Saga像个独立线程一样,专门负责处理副作用,多个Saga可以串行/并行组合起来,...区别是Flux用action描述消息(发生了什么),而redux-saga用Effect描述操作指令(要做什么) Effect creator redux-saga/effects提供了很多用来生成Effect...task与当前saga有关 fork所在的saga会等待forked task,只有在所有forked task都执行结束后,当前saga才会结束 fork的执行机制与all完全一致,包括cancel和...术语Saga指的是一系列操作的集合,是个运行时的抽象概念 redux-saga里的Saga形式上是generator,用来描述一组操作,而generator是个具体的静态概念 P.S.redux-saga...里所说的Saga大多数情况下指的都是generator形式的一组操作,而不是指redux-saga自身。

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

    React-Redux-Saga

    Redux-saga 简介redux-saga 和 redux-thunk 一样, 是一个 Redux 中获取存储异步数据的中间件redux-saga 可以直接拦截 dispatch 派发的 action..., 从而实现在执行 reducer 之前执行一些其它操作使用 Redux-saga安装 Redux-saganpm install redux-saga在创建 store 时应用 redux-saga...如果导入的是redux-saga, 那么返回给我们的是一个用于创建中间件对象的方法* */import createSagaMiddleware from 'redux-saga'import...put} from 'redux-saga/effects'import {GET_USER_INFO} from '....那么问题来了,如果想要验证如上博主所说的这点,就必须要派发多次 action 那么该如何进行派发呢,正好可以借助该问题就可以引出一个全新的知识点了那么就是连续派发多个 action,如果我们只需要拦截一个类型的

    21430

    redux-saga学习

    redux-saga redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga通过创建sagas将所有异步操作逻辑收集在一个地方集中处理,可以用来代替redux-thunk...这意味着应用的逻辑会存在两个地方: reducer负责处理action的state更新 sagas负责协调那些复杂或者异步的操作 React+Redux Cycle(来源:https://www.youtube.com...https://github.com/redux-saga/redux-saga-beginner-tutorial.git 2.安装依赖 cd redux-saga-beginner-tutorial...下面演示了这个辅助函数是如何由低级 Effect 实现的: const takeEvery = (patternOrChannel, saga, ...args) => fork(function*()...假如被终止的 Saga 下仍有分叉(forked)任务还在运行,那么它在终止任务前,会先等待其所有子任务均被终止。

    2.7K10

    redux-saga_pub culture

    redux store (dispatch一下) 3265839-1e5cf739fe7c1784.jpg redux-saga-01.jpg 可以看到在使用了Saga后,react只负责数据如何展示...如何使用 redux-sage官方文档有很详细的使用说明,这里只做简单的上手说明。...put方法 put就是redux的dispatch,用来触发reducer更新store 有什么弊端 目前在项目实践中遇到的一些问题: redux-saga模型的理解和学习需要投入很多精力 因为需要用...之所以最后选择了saga是因为这段 Cheng Lou 的视频: On the Spectrum of Abstraction (youtube) 视频中讲述了在一种抽象的概念下如何去选择一种技术。...而Saga解决的问题要更宽泛一些,因为saga只是拦截了action,至于做什么,开发者需要自己来考虑,可以是fetch后端,也可以是更新redux store, 甚至可以执行action带进来的callback

    1.4K10

    手写Redux-Saga源码

    本文要讲的就是Redux-Saga,这个也是我在实际工作中使用最多的Redux异步解决方案。...本文仍然是老套路,先来一个Redux-Saga的简单例子,然后我们自己写一个Redux-Saga来替代他,也就是源码分析。...fork的使用跟call很像,也是可以直接调用传进来的方法,只是call会等待结果回来才进行下一步,fork不会阻塞这个过程,而是当前结果没回来也会直接运行下一步: fork(fn, ...args);.../ 运行fn得到一个迭代器 proc(env, taskIterator); // 直接将taskIterator给proc处理 cb(); // 直接调用cb,不需要等待...本文可运行的代码已经上传到GitHub,可以拿下来玩玩:github.com/dennis-jian… 参考资料 Redux-Saga官方文档:redux-saga.js.org/ Redux-Saga

    1.7K30

    React-Redux-Saga实现原理

    前言React-Redux-Saga是一个用于处理Redux异步操作的中间件,它的实现原理基于生成器函数(Generator Functions)和事件监听模式。...本文的主题为 saga 的实现原理,那么与其说 sage 的实现原理,不如说在 saga 中如何通过 yield 获取异步返回的结果,在 React-Saga 中如何通过 yield 获取到数据之前,我还是建议去把博主在...好了,废话不多了,首先来看几个示例,对应的这几个案例分别说明了几个注意点,然后我们在实现 saga 中通过 yield 获取异步数据的底层实现代码,第一个示例如,定义了一个生成器函数, 这个函数保存了...然后调用定义的函数获取异步数据,然后在通过拿到的可迭代对象调用 next 方法将获取到的方法,传递给上一次 yield 进行变量赋值,然后我们在自定义生成器函数的 yield 当中就获取到异步数据了从而实现了 saga

    30950

    一文梭穿Vuex、Flux、Redux、Redux-saga、Dva、MobX

    举个例子: // saga.js import { take, put } from 'redux-saga/effects' function* mySaga(){ // 阻塞: take方法就是等待...会等待执行结果返回,再执行下一指令。...saga 还能很方便的并行执行异步任务,或者让两个异步任务竞争: // 并行执行,并等待所有的结果,类似 Promise.all 的行为 const [users, repos] = yield [...对比 Redux-thunk 比较一下 redux-thunk 和 redux-saga 的代码: 和 redux-thunk 等其他异步中间件对比来说,redux-saga 主要有下面几个特点:...之前我们聊了 redux、react-redux、redux-saga 之类的概念,大家肯定觉得头昏脑涨的,什么 action、reducer、saga 之类的,写一个功能要在这些js文件里面不停的切换

    5.5K10

    Redux 异步解决方案2. Redux-Saga中间件

    否则会出现惊喜 call generator 只能接受到返回值 redux-saga初使用 安装: yarn add redux-saga store.js import { createStore...from 'redux-saga'; // 导入创建saga的函数 import {add, deleter} from '....// 查询store的状态 takeEvery // 对action进行监听 } from 'redux-saga/effects'; export function* fetchData...takeLatest("actionType", generator) 解释: 类似防抖 只会有一个任务 会自动取消前一个任务 take 解释: take函数可以理解成为监听未来的action 告诉middleware等待第一个...action Generator会暂停 直到action匹配成功 才会执行之后的语句 也就是说take是一个阻塞的effect fork 解释: fork和call函数类似 但是fork是非阻塞函数 不会等待执行

    1.1K20

    React之redux学习日志(reduxreact-reduxredux-saga)

    Redux-Saga中间件 redux-saga中文文档地址:https://redux-saga-in-chinese.js.org/docs/basics/DeclarativeEffects.html...当我们需要执行一些异步操作时,由于action中只能返回一个对象,从而需要借助一些中间件来达到目的,redux-thunk 和 redux-saga是常见的两种中间件。   .../sagas"; import createSagaMiddleware from "redux-saga"; // 创建 redux-saga 中间件 const sagaMiddleware =...redux-saga中有很多 声明 effects 函数(比如:call、put、takeEvery、all、fock等等),具体请查阅redux-saga文档。...备注:redux-saga函数必须是一个Generator函数 拓展:还可以通过以下代码来将saga进行模块化: import { all, fork } from 'redux-saga/effects

    55830

    如何看懂 redux 原理

    如何看懂 redux 原理 我们想想怎么创建一个 store 这个 store 支持我们做什么 获取 store 里面的数据状态 可以更新 store 里面的数据状态 通过什么样的方式更新 store...里面数据状态 外部如何知道数据已经更新,通过订阅的方式 通过以上的步骤,我们可以画出以下的流程图,或者原理图: ?...// redux 给我们提供了 combineReducers({reducer}) ? 那么外部 视图层如何知道 store 里面的 state 是被更新过了呢?...redux 采用了订阅的方式 // 那么外部是如何知道 store 里面的 state 被更新过了呢 // redux 采用 订阅的方式 store.subscribe(function(){ console.log...// redux 给我们提供了 combineReducers({reducer}) // 如果有中间件如何处理呢 // redux 提供了 applyMiddleware(中间件)

    44920

    如何用 Kotlin 实现 Redux

    对于开发者来说,重要的是区分开哪些属于 data,哪些属于 render,想要更新用户界面,要做的就是更新 data,用户界面自然会做出响应,所以 React 实践的也是“响应式编程”(Reactive...具体进行说明是如何解决组件间通信的问题: 发起路由请求 // 跳转并携带参数 ARouter.getInstance().build("/test/1") .withLong("...受到 redux[5] 这个项目的启发,我用 kotlin&rxjava 也实现了一个 redux,也可以认为和 Android 平台无关的 redux(没有用到 Android 的类),当然之后也可以像...flutter_redux[6] 一样,包一层 Android 相关的类,实现一个 Android 平台的 redux。...: https://zhuanlan.zhihu.com/p/26160377 [5] redux: https://github.com/johnpryan/redux.dart [6] flutter_redux

    1.4K10

    9. redux如何精简代码

    经过2天折腾,终于把API全面切换到GitHub,总结一下经验: redux精简代码 使用redux-persist持久化数据 redux如何减少样板代码##### ---- 通过之前的代码不难看出...本来是打算使用第三方组件的,比如redux-actions(https://github.com/acdlite/redux-actions)等,但是实验了一下,功力不足反而没有成功,然后自己照抄官方说明写了一下...,那么这样的action如何解析呢,这就要使用中间件了,前文说了,redux里都是函数式的,这就可以让我们在传递过程中做处理了,其实可以理解为类似java spring中的AOP,servlet中的拦截器...真正的 Flux 模版是概念性的:发送更新的需求,用 Dispatcher 注册 Store 的需求,Store 是对象的需求 (当你想要一个哪都能跑的 App 的时候复杂度会提升)。...在组件内部调用的的方式没有任何改变,这也是redux的强大之处。 给个效果图 ?

    1.1K50
    领券