Reactjs 什么时候使用叉子?

Reactjs 什么时候使用叉子?,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,下面两种方法的区别是什么 导出函数*watchLoginUser(){ 收益率(用户登录,登录用户) } 导出函数*watchLogoutUser(){ 收益率(用户\注销,注销用户) } 导出函数*watchGetParties(){ 收益率(参与方、获取方) } 导出默认函数*root(){ 屈服[ 叉子(手表), fork(watchLogoutUser), 福克(守望党) ] } 导出默认函数*root(){ 屈服[ takeEvery(用户登录,登录用户), TakeEver(用户\

下面两种方法的区别是什么

导出函数*watchLoginUser(){
收益率(用户登录,登录用户)
}
导出函数*watchLogoutUser(){
收益率(用户\注销,注销用户)
}
导出函数*watchGetParties(){
收益率(参与方、获取方)
}
导出默认函数*root(){
屈服[
叉子(手表),
fork(watchLogoutUser),
福克(守望党)
]
}
导出默认函数*root(){
屈服[
takeEvery(用户登录,登录用户),
TakeEver(用户\注销,注销用户),
takeEvery(PARTIES\u GET,getParties)
]
}

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

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

在各种情况下,这可能是有用的,但主要有两种情况:

  • 按逻辑域对传奇进行分组
  • 保留对任务的引用以便能够取消/加入它
您的顶级传奇可以是第一个用例的示例。您可能会遇到以下情况:

yield fork(authSaga);
产量叉(myDomainSpecificSaga);
//你可以在这里使用类似于收益率的东西;
//但这并没有什么区别
其中,
authSaga
可能包括以下内容:

yield takeEvery(用户请求登录,认证者);
收益率(用户\请求\注销,注销用户);
您可以看到,这个示例与您建议的相当,使用
fork
调用一个传奇故事,生成一个
takeEvery
调用。但在实践中,您只需要出于代码组织的目的执行此操作
takeEvery
本身就是一个分叉任务,因此在大多数情况下,这将是无用的冗余

第二个用例的示例如下:

yield take(用户已通过身份验证);
const task=yield fork(monitorUserProfileUpdates);
产量获取(用户签出);
放弃(任务);
在本例中,您可以看到,
monitorUserProfileUpdates
将在调用方saga恢复时执行,并等待发送
USER\u SIGNED\u
操作。此外,它还可以保留对它的引用,以便在需要时取消它

为了完整性起见,还有另一种启动非阻塞调用的方法:
spawn
fork
spawn
在错误和取消在子代和父代之间冒泡的方式上有所不同