【问题标题】:Cancel all tasks except from one in redux saga取消除 redux saga 中的一项之外的所有任务
【发布时间】:2018-06-16 19:00:13
【问题描述】:

我正在阅读 redux saga 文档中的一些高级概念,但我在这里有一个问题。在文档中使用以下代码来调度我们代码中存在的所有操作:

import { select, take } from 'redux-saga/effects'

function* watchAndLog() {
  while (true) {
    const action = yield take('*')
    const state = yield select()

    console.log('action', action)
    console.log('state after', state)
  }
}

使用通配符 * 我们在应用程序中执行所有操作。有没有办法从一个或两个具体行动中采取所有行动?我想调度“LOGIN”和“LOGOUT”动作所期望的所有动作?有什么想法吗?

【问题讨论】:

  • 标题有点误导。你说你想“取消”任务? take 没有运行传奇。在上面的take 处,您已经启动了一个动作。

标签: javascript redux redux-saga


【解决方案1】:

来自take上的文档:

如果它是一个函数,则如果 pattern(action) 为真,则匹配该动作(例如,take(action => action.entities) 将匹配具有(真实)实体字段的所有动作。)

所以你可以这样做:

function* watchAndLog() {
  while (true) {
    const action = take(action => ['LOGIN', 'LOGOUT'].indexOf(action.type) < 0);
    ...
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多