当前位置: 首页 > 面试题库 >

redux-saga何时使用fork?

华良平
2023-03-14
问题内容

以下两种方法有什么区别?

export function* watchLoginUser() {
  yield takeEvery(USER_LOGIN, loginUser)
}
export function* watchLogoutUser() {
  yield takeEvery(USER_LOGOUT, logoutUser)
}
export function* watchGetParties() {
  yield takeEvery(PARTIES_GET, getParties)
}
export default function* root() {
  yield [
    fork(watchLoginUser),
    fork(watchLogoutUser),
    fork(watchGetParties)
  ]
}



export default function* root() {
  yield [
    takeEvery(USER_LOGIN, loginUser),
    takeEvery(USER_LOGOUT, logoutUser),
    takeEvery(PARTIES_GET, getParties)
  ]
}

什么时候需要使用fork,什么时候不需要?


问题答案:

通常,fork当传奇需要启动非阻塞任务时很有用。这里的非阻塞意味着:调用方启动任务并继续执行,而无需等待任务完成。

在许多情况下这可能有用,但主要有2种情况:

  • 逻辑域对Sagas进行分组
  • 保留对任务的引用,以便能够取消/加入该任务

您的顶级传奇故事可能是第一个用例的示例。您可能会遇到类似:

yield fork(authSaga);
yield fork(myDomainSpecificSaga);
// you could use here something like yield [];
// but it wouldn't make any difference here

其中authSaga可能包括了诸如:

yield takeEvery(USER_REQUESTED_LOGIN, authenticateUser);
yield takeEvery(USER_REQUESTED_LOGOUT, logoutUser);

您可以看到该示例与您所建议的等效,通过fork传奇式takeEvery电话进行通话。但是实际上,您仅需要出于代码组织目的执行此操作。takeEvery这本身就是一项分叉的任务,因此在大多数情况下,这将毫无用处。

第二个用例的示例如下:

yield take(USER_WAS_AUTHENTICATED);
const task = yield fork(monitorUserProfileUpdates);
yield take(USER_SIGNED_OUT);
yield cancel(task);

您可以在此示例中看到,monitorUserProfileUpdates将在调用者传奇恢复后执行,并等待USER_SIGNED_OUT要分派的操作。另外,它可以保留对它的引用,以便在需要时取消它。

为了完整起见,还有另一种开始非阻塞调用的方式:spawnfork并且spawn在错误和取消从子级到父级传奇的冒泡方式上有所不同。



 类似资料:
  • 我有一个redux saga设置,工作正常。我的一个分派任务是创建一个新订单,然后一旦创建了订单,我就想用更新后的状态做一些事情。 由于 createOrder 操作触发调用 API 的重订传奇,因此存在延迟,因此在我的函数 do 之前不会更新此 .props.user 命令某些内容被调用。我可以设置一个超时,但这似乎不是一个可持续的想法。 我已经阅读了有关Stack Overflow的类似问题,

  • This project was bootstrapped with Create React App. This is an advanced Boilerplate Project using: Redux Axios Reselect Immutable Recompose Redux-Saga React-Router React-Router-Redux Getting Started

  • 问题内容: 我正在尝试测试我的传奇可能遵循的每种情况,但是我无法使我想要的行为发生。这很简单,我有一个HTTP请求(登录),并且我想通过模拟我的API方法来测试成功和失败的情况。 但是,看起来好像并没有触发我的api函数,我还没有真正了解它的工作原理,但是我猜中间件负责调用该函数,并且由于我不去浏览商店我的测试,我无法得到结果。 所以我的问题是,当您需要在异步调用旁边分派不同的动作(通常是成功或失

  • redux-saga 是一个用于管理 Redux 应用异步操作(Side Effects。译注:直译成 “副作用” 不太通顺,所以这里译为 “异步操作” 更好理解)的中间件(又称异步 action)。

  • Redux Thunk和Redux Saga都是Redux的中间件。两者之间的区别是什么?如何确定何时使用Redux Thunk或Redux Saga?

  • 本文向大家介绍一篇文章介绍redux、react-redux、redux-saga总结,包括了一篇文章介绍redux、react-redux、redux-saga总结的使用技巧和注意事项,需要的朋友参考一下 本篇主要将react全家桶的产品非常精炼的提取了核心内容,精华程度堪比精油。各位大人,既然来了,客官您坐,来人,给客官看茶~~ redux 前言 首先,本篇文章要求您对js,react等知识有