Javascript 带正则表达式的redux saga take
我正在为我的web应用程序使用Javascript 带正则表达式的redux saga take,javascript,ecmascript-6,redux,redux-saga,Javascript,Ecmascript 6,Redux,Redux Saga,我正在为我的web应用程序使用redux saga,但是我已经达到了一个点,我希望能够创建一个处理多种不同请求类型的saga。为了做到这一点,我希望能够将take或takeEvery与reg-ex一起使用。例如: 'foo/SOME_REQUEST' 'bar/SOME_REQUEST' 'baz/SOME_REQUEST' 所有这些都应该通过这样的方式来处理: yield takeEvery('*/SOME_REQUEST', handler); 有人知道这是否可能或如何实现吗?下面是一个
redux saga
,但是我已经达到了一个点,我希望能够创建一个处理多种不同请求类型的saga
。为了做到这一点,我希望能够将take
或takeEvery
与reg-ex一起使用。例如:
'foo/SOME_REQUEST'
'bar/SOME_REQUEST'
'baz/SOME_REQUEST'
所有这些都应该通过这样的方式来处理:
yield takeEvery('*/SOME_REQUEST', handler);
有人知道这是否可能或如何实现吗?下面是一个示例代码 演示:
GitHub:您可以使用
yield takeLatest( action => /SOME_REQUEST$/.test(action.type), handler)
或
正如@lukehedger在此指出的:
检查文档:您需要使用自定义效果
//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.js
function* formFailureSaga({ payload, action }) {
yield console.log("form failure SAGA", payload, action)
}
export function* watchFormFailureSaga() {
yield takeEveryRegex(/^FAILURE[/s/S]*((?=.*FORM))/, formFailureSaga)
}
从源代码()看,匹配器似乎可以是一个函数,因此您应该能够产生takeEvery(predicateFn,handler)代码>
//saga.js
function* formFailureSaga({ payload, action }) {
yield console.log("form failure SAGA", payload, action)
}
export function* watchFormFailureSaga() {
yield takeEveryRegex(/^FAILURE[/s/S]*((?=.*FORM))/, formFailureSaga)
}