首页 > 解决方案 > 了解在 redux saga 工作中生效吗?

问题描述

我正在通过 youtube 上的课程构建一个应用程序。但我并不真正了解take效果工作。我知道take效果会暂停,直到收到操作为止。

src/sagas/statsSaga.js

function* watchStatsRequest() {
  while (true) {
    const { images } = yield take(IMAGES.LOAD_IMAGES_SUCCESS);
    for (let i = 0; i < images.length; i++) {
      yield fork(handleStatsRequest, images[i].id);
    }
  }
}

如何yield take(IMAGES.LOAD_IMAGES_SUCCESS)返回图像数组?我的完整代码:https ://codesandbox.io/s/github/Kalipts/images-load-saga?file=/src/sagas/statsSaga.js

标签: reactjsreduxredux-saga

解决方案


take等待IMAGES.LOAD_IMAGES_SUCCESS动作被调度并在动作被调度后返回动作对象。该操作具有以下结构(基于您的沙箱)

 {
    type: IMAGES.LOAD_IMAGES_SUCCESS,
    images: images,
 }

这个说法

const { images } = yield take(IMAGES.LOAD_IMAGES_SUCCESS);

将通过解构从动作对象中获取 images 属性,并返回一个名为 images 的变量,其中包含动作对象的 images 属性的数据

为简单起见,代码可以这样改写

//wait for IMAGES.LOAD_IMAGES_SUCCESS to be dispatched
const action = yield take(IMAGES.LOAD_IMAGES_SUCCESS); 
//assign the images property from the resulting action object to a new variable
const images = action.images

推荐阅读