我正在使用redux-saga作为我的web应用,但是我已经达到了一个点,我希望能够创建一个单一的saga来处理多种不同的请求类型。为了做到这一点,我希望能够使用take或takeEvery与reg-ex。例如:
redux-saga
saga
take
takeEvery
'foo/SOME_REQUEST' 'bar/SOME_REQUEST' 'baz/SOME_REQUEST'
都应该通过这样的方式来处理:
yield takeEvery('*/SOME_REQUEST', handler);
有人知道这是否可能或如何实现吗?
aij0ehis1#
您可以使用
yield takeLatest( action => /SOME_REQUEST$/.test(action.type), handler)
或
yield take( action => /SOME_REQUEST$/.test(action.type))
正如@lukehedger在这里指出的:github issue查看文档:拍摄(模式)
ig9co6j12#
下面是一个示例代码。演示:http://kuy.github.io/redux-saga-examples/takex.htmlGitHub:https://github.com/kuy/redux-saga-examples/tree/master/takex
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) }
3条答案
按热度按时间aij0ehis1#
您可以使用
或
正如@lukehedger在这里指出的:github issue
查看文档:拍摄(模式)
ig9co6j12#
下面是一个示例代码。
演示:http://kuy.github.io/redux-saga-examples/takex.html
GitHub:https://github.com/kuy/redux-saga-examples/tree/master/takex
js5cn81o3#
您需要使用自定义效果。
然后在你的 Saga 中,按照正常的模式使用它。