javascript - 使用 redux-saga 进行异步 api 调用

标签 javascript api reactjs redux redux-saga

我正在关注redux-saga documentation到目前为止,它似乎非常简单,但是在执行 api 调用时我偶然发现了一个问题(正如您将看到指向此类示例的文档链接)

有一部分 Api.fetchUser 没有解释,因此我不明白这是否是我们需要使用像 axios 这样的库来处理的东西。或superagent ?或者是别的什么。诸如 call、put 等 saga 效果是否与 get、post 等效?如果是这样,为什么他们会这样命名?本质上,我试图找到一种正确的方法来对 url example.com/sessions 处的 api 执行简单的 post 调用,并传递诸如 { email: 'email', password: '密码'}

最佳答案

Api.fetchUser 是一个函数,应该在其中执行 api ajax 调用,并且应该返回 Promise。

就您而言,此 promise 应该解析用户数据变量。

例如:

// services/api.js
export function fetchUser(userId) {
  // `axios` function returns promise, you can use any ajax lib, which can
  // return promise, or wrap in promise ajax call
  return axios.get('/api/user/' + userId);
};

然后是传奇:

function* fetchUserSaga(action) {
  // `call` function accepts rest arguments, which will be passed to `api.fetchUser` function.
  // Instructing middleware to call promise, it resolved value will be assigned to `userData` variable
  const userData = yield call(api.fetchUser, action.userId);
  // Instructing middleware to dispatch corresponding action.
  yield put({
    type: 'FETCH_USER_SUCCESS',
    userData
  });
}

callput 是效果创建器函数。他们不熟悉 GETPOST 请求。

call 函数用于创建效果描述,指示中间件调用 Promise。 put 函数创建效果,其中指示中间件将操作分派(dispatch)到存储。

关于javascript - 使用 redux-saga 进行异步 api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791974/

相关文章:

reactjs - 在 Enzyme 测试中更改 MemoryRouter 中的路由路径

javascript - jQuery 在方向上显示/隐藏 div

JavaScript 属性更改事件

javascript - SpringMVC : handling validation errors on a page with an ajax loaded <select>

javascript - Jquery:具有相同父类和子类的子 div 的不同宽度,基于子 div 的数量

php - 通过 facebook php api 作为 facebook 管理员在 facebook 页面墙上发布

api - 为什么我的 POST 请求仅对我的 API 不起作用?

javascript - 如何在 mailto 链接中动态设置收件人?

javascript - 使用 API 调用更新 React-Redux 中的组件状态

java - 简单 Java API - 错误 : Unrecognized field, 未标记为可忽略