Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs redux和redux saga UI操作触发多个API操作_Reactjs_Redux_Redux Saga - Fatal编程技术网

Reactjs redux和redux saga UI操作触发多个API操作

Reactjs redux和redux saga UI操作触发多个API操作,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,只是想了解在redux和redux-saga中,一系列API调用依赖于单个UI操作的最佳实践是什么。比如说 UI操作所选项目\u更改被触发 几个API请求操作被触发:DATA1\u请求,DATA2\u请求,…,DATA10\u请求 当请求数据时DATA10_请求get resolved,redux saga将一系列操作(如DATA1_SUCCESS)以及要解析的数据发送到存储。我是通过《redux传奇》(redux saga)获得这一部分的,我基本上了解如何做到这一点 我的问题是,如何获取DAT

只是想了解在
redux
redux-saga
中,一系列API调用依赖于单个UI操作的最佳实践是什么。比如说

  • UI操作
    所选项目\u更改
    被触发
  • 几个API请求操作被触发:
    DATA1\u请求
    DATA2\u请求
    ,…,
    DATA10\u请求
  • 当请求数据时
    DATA10_请求
    get resolved,redux saga将一系列操作(如
    DATA1_SUCCESS
    )以及要解析的数据发送到存储。我是通过《redux传奇》(redux saga)获得这一部分的,我基本上了解如何做到这一点
  • 我的问题是,如何获取
    DATA1\u请求
    <代码>数据10\u请求在触发
    所选项目更改
    时触发?愚蠢的方法是只在发送
    SELECTED\u ITEM\u CHANGE
    的组件中执行,然后只
    dispatch
    所有这些操作以及
    SELECTED\u ITEM\u CHANGE
    操作,但这不是模块化的,因为组件不应该负责所有这些API调用。那么谁来处理呢?我想有两种选择:

  • 使分派
    所选项目更改的操作创建者也分派
    数据1\u请求
    ,…,
    数据10\u请求
  • 制作一个传奇故事,聆听
    所选项目的更改
    并发送
    数据1\u请求
    ,…,
    数据10\u请求
  • 我倾向于第二种,但我不是很确定


    谢谢你的帮助

    选项2是您的选择,这就是
    redux saga
    AFAIK背后的全部要点。您可以简单地使用
    takeEvery
    (允许多个请求)或
    takeLatest
    来侦听
    所选项目的更改
    操作,并让位于实际执行网络请求的另一个saga

    您可以在此处的文档中看到一个示例:

    摘录:

    import { takeLatest } from 'redux-saga/effects'
    
    function* fetchData(){
       try {
          const data = yield call(Api.fetchUser, action.payload.url)
          yield put({type: "FETCH_SUCCEEDED", data})
       } catch (error) {
          yield put({type: "FETCH_FAILED", error})
       }
    }
    
    function* watchFetchData() {
      yield takeLatest('FETCH_REQUESTED', fetchData)
    }