21

START アクションがディスパッチされると、ストップウォッチ React コンポーネントのタイマーを開始します。

import 'babel-polyfill'
import { call, put } from 'redux-saga/effects'
import { delay, takeEvery, takeLatest } from 'redux-saga'
import { tick, START, TICK, STOP } from './actions'

const ONE_SECOND = 1000

export function * timerTickWorkerSaga (getState) {
  yield call(delay, ONE_SECOND)
  yield put(tick())
}

export default function * timerTickSaga () {
  yield* takeEvery([START, TICK], timerTickWorkerSaga)
  yield* takeLatest(STOP, cancel(timerTickWorkerSaga))
}
/*
  The saga should start when either a START or a TICK is dispatched
  The saga should stop running when a stop is dispatched
*/

STOPコンポーネントからアクションがディスパッチされたときに、サガを停止するのに問題があります。私は自分のワーカーサガ内からエフェクトを使用してみcancelました:cancelled

if(yield(take(STOP)) {
  yield cancel(timerTickWorkerSaga)
}

また、監視サービスからサガを停止しようとする最初のコード ブロックのアプローチと同様です。

4

3 に答える 3