reactjs - API 请求的 redux 传奇有意义吗?

标签 reactjs redux redux-saga

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

它将采取 REQUEST 操作,其中包含 header 、URL、数据等所有信息,并将其与自己的 header 和基本 URL 合并。 然后,它会获取请求,然后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 更好?

一旦在响应 header 中遇到 API access_token,saga 还可以负责管理它,并将其保存以用于所有后续请求。

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
}

最佳答案

这里提出了几个问题。

  • 是的。通用请求传奇对我来说很有意义。为所有请求提供标准的地方是有意义的。

  • fork 是绝对需要的。或者更确切地说,使用 takeEvery 帮助器。这是为了防止在 saga 处理 fetch 时丢失某些请求。可能还需要使用 race 来实现默认超时。

  • request 函数中的 actions 参数最好是对象,而不是带有 startAction 键的数组。另一种方法是为请求指定名称。并为每个操作添加通用后缀(例如 GETSTH_START、GETSTH_SUCCESS、GETSTH_ERROR)

关于reactjs - API 请求的 redux 传奇有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746462/

相关文章:

reactjs - 取消后不会调用操作 redux-saga

javascript - 为 React Component 提供替代渲染方法

reactjs - 关于更新 useState 的奇怪问题

javascript - React + Redux Prop 没有及时加载

reactjs - 如何为具有自己状态的多个 React 组件重用相同的 Redux Saga?

javascript - redux saga channel 关闭后如何运行同步代码

javascript - Draft JS 编辑器在父组件更改其值时不更新其内容?

javascript - React 组件功能在单击按钮上不起作用

reactjs - 如何使用 react redux 发出 post 请求?

javascript - 是否有办法在 redux reducer 中柯里化(Currying)多个 ramda 的 assocPath 方法?