我正在使用redux-saga
作为我的网络应用,但是我想要能够创建一个处理多个不同请求的saga
类型。为了做到这一点,我希望能够将take
或takeEvery
与reg-ex一起使用。例如:
'foo/SOME_REQUEST'
'bar/SOME_REQUEST'
'baz/SOME_REQUEST'
所有这些都应该通过以下方式处理:
yield takeEvery('*/SOME_REQUEST', handler);
有谁知道这是否可能或如何实现?
答案 0 :(得分:9)
您可以使用
yield takeLatest( action => /SOME_REQUEST$/.test(action.type), handler)
或
yield take( action => /SOME_REQUEST$/.test(action.type))
正如@lukehedger所指出的那样:github issue
检查文档:take(pattern)
答案 1 :(得分:2)
这是一个示例代码。
演示:http://kuy.github.io/redux-saga-examples/takex.html
GitHub:https://github.com/kuy/redux-saga-examples/tree/master/takex
答案 2 :(得分:1)
您需要使用自定义效果。
//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)
}