API请求的redux传奇是否有意义?

时间:2016-03-02 11:53:14

标签: reactjs redux redux-saga

我想知道通用请求saga是否有意义?

这将需要REQUEST操作,其中包含所有信息,如标头,网址,数据,并将其与自己的标头和基本网址合并。 然后它将fetch请求,然后put(REQUEST_SUCCEEDED, json)与商店中的json有效负载。

const request = yield take(REQUEST)
const { url, data, headers } = request
try {
  if (request.startAction) {
    yield put(request.startAction)
  }
  const json = yield call(api.fetch, url, data, headers)
  yield put({...request.successAction, json})
} catch (error) {
  yield put({...request.errorAction, error})
}

根据我的理解,这一次只允许一个请求,所以不是调用API获取函数而是fork会更好吗?

一旦在响应标头中遇到API,它也可以负责管理API access_token,并将其保存到所有后续请求中。

function getAction(action) {
  if (action) {
    if (typeof action === "string") {
      return { type: action }
    } else {
      return action
    }
  }
}

export function request(url, data, headers, actions) {
  let result = { 
    type: REQUEST,
    url, data, headers
  }
  actions[0] && result.startAction = getAction(actions[0])
  actions[1] && result.successAction = getAction(actions[1])
  actions[2] && result.errorAction = getAction(actions[2])
  return result
}

1 个答案:

答案 0 :(得分:2)

这里有几个问题。

  • 是。通用请求saga对我有意义。为所有请求提供标准的地方是有道理的。

  • 叉子绝对是必需的。或者更确切地说使用takeEvery帮助器。这是为了防止在传奇处理fetch时丢失一些请求。使用race

  • 也可能需要实现默认超时
  • actions函数中的request参数比使用startAction键的数组更好。另一种方法是给请求一个名字。并为每个操作创建通用后缀(例如,GETSTH_START,GETSTH_SUCCESS,GETSTH_ERROR)