【问题标题】:redux-saga take with regular expressionredux-saga 带正则表达式
【发布时间】:2016-10-20 20:55:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: javascript ecmascript-6 redux redux-saga


【解决方案1】:
【解决方案2】:

你可以使用

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

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

正如@lukehedger 在这里指出的那样:github issue

查看文档:take(pattern)

【讨论】:

    【解决方案3】:

    您需要使用自定义效果。

     //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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2020-01-25
      相关资源
      最近更新 更多