带正则表达式的redux-saga take

at0kjp5o  于 2023-01-30  发布在  其他
关注(0)|答案(3)|浏览(118)

我正在使用redux-saga作为我的web应用,但是我已经达到了一个点,我希望能够创建一个单一的saga来处理多种不同的请求类型。为了做到这一点,我希望能够使用taketakeEvery与reg-ex。例如:

'foo/SOME_REQUEST'
'bar/SOME_REQUEST'
'baz/SOME_REQUEST'

都应该通过这样的方式来处理:

yield takeEvery('*/SOME_REQUEST', handler);

有人知道这是否可能或如何实现吗?

aij0ehis

aij0ehis1#

您可以使用

yield takeLatest( action => /SOME_REQUEST$/.test(action.type), handler)

yield take( action => /SOME_REQUEST$/.test(action.type))

正如@lukehedger在这里指出的:github issue
查看文档:拍摄(模式)

js5cn81o

js5cn81o3#

您需要使用自定义效果。

//effect.js
    
 export const takeEveryRegex = (pattern, saga, ...args) =>
  fork(function* () {
    while (true) {
      const action = yield take("*")
      if (pattern.test(action.type)) {
        yield fork(saga, ...args.concat(action))
      }
    }
  })

然后在你的 Saga 中,按照正常的模式使用它。

//saga.js    

function* formFailureSaga({ payload, action }) {
  yield console.log("form failure SAGA", payload, action)
}
    
export function* watchFormFailureSaga() {
  yield takeEveryRegex(/^FAILURE[/s/S]*((?=.*FORM))/, formFailureSaga)
}

相关问题