redux-saga中的api有take、put、all、select这些,在redux-saga中将这些api都定义为Effect。在Effect执行后,当函数resolved时返回一个描述对象,然后saga根据这个描述对象恢复执行generator中的函数。 redux-thunk的大体过程: action1(side function)—>redux-thunk监听—>执行相应的有副作用的方法—>action2(plain object...
take函数可以理解为监听未来的action,它创建了一个命令对象,告诉middleware等待一个特定的action, Generator会暂停,直到一个与pattern匹配的action被发起,才会继续执行下面的语句,也就是说,take是一个阻塞的 effect put(action) put函数是用来发送action的 effect,你可以简单的把它理解成为redux框架中的dispatch函数,当put...
第一个参数是函数名,而不是去执行函数,后面跟着的就是参数 import{takeEvery,put,call}from"redux-saga/effects" import{post}from"@/utils/http" function*watchSaga() { yieldtakeEvery('asyncadd',addSaga) } /* 在此处完成网络请求 */ function*addSaga({payload}) { /*收到发过的的dispatch saga帮...
在上面的代码中,分别有 Worker Saga, Watcher Saga 和 最后的 rootSaga Worker Saga 用于执行真正的任务,在这里可以使用 call 来发送请求,可以通过 put 来调用 reducerWatcher Saga 用于监听 action, 当 dispatch 到所监听的 action 时,就会调用对应的 Worker SagarootSaga 则用于启动 Watcher Saga 通常对于异步...
put将数据output到store,相当于redux的store.dispatch call执行一个promise或者一个saga fork同call一样去执行但是不阻碍当前任务队列 takeEvery当匹配到action的时候,执行一个saga takeLatest当匹配到action的时候,取消上个同action的saga并执行一个新的sag
Put: 创建一个 Effect 描述信息,用来命令 middleware 向 Store 发起一个 action。 这个 effect 是非阻塞型的,并且所有向下游抛出的错误(例如在 reducer 中),都不会冒泡回到 saga 当中。 Call: 创建一个 Effect 描述信息,用来命令 middleware 以参数args调用函数fn。
第四步:回到sagas.js文件来,写处理action,做异步操作的逻辑,这里就是异步获取数据,并再创建一个action,将数据存入action通过put派发,给reducer处理 // 注意takeEvery,put的导入目录问题 import {initListAction} from "./actionCreators" import {GET_INIT_LIST} from "./actionTypes" ...
console.log(put({type:'increment'})); 在redux-saga 的世界里,Saga 都用 Generator 函数实现。我们从 Generator 里 yield 纯 JavaScript 对象以表达 Saga 逻辑。 我们称呼那些对象为Effect。Effect 是一个简单的对象,这个对象包含了一些给 middleware 解释执行的信息。 你可以把 Effect 看作是发送给 middleware ...
在Redux Saga中使用异步等待的方法是通过使用Effect函数来实现。Effect函数是一个Generator函数,它可以被Redux Saga中间件执行。下面是在Redux Saga中使用异步等待的步骤: 导入所需的Effect函数和其他必要的依赖: 代码语言:txt 复制 import { put, call, takeEvery } from 'redux-saga/effects'; import { fetchData...
import { put, delay, takeEvery, all } from 'redux-saga/effects' export function* helloSaga() { console.log('start') } export function* incrementAsync(action) { yield delay(1000) // 使用这个函数去阻塞Generator yield put({ type: types.INCREMENT, payload: action.payload }) // 然后 dispat...