メインコンテンツに移動

用語集

これは、Redux Sagaにおける中心的な用語の用語集です。

Effect

Effectとは、Sagaミドルウェアによって実行されるいくつかの命令を含むプレーンなJavaScriptオブジェクトです。

redux-sagaライブラリによって提供されるファクトリ関数を使用してEffectを作成します。たとえば、call(myfunc, 'arg1', 'arg2')を使用して、ミドルウェアにmyfunc('arg1', 'arg2')を呼び出すように指示し、その結果をEffectを生み出したジェネレーターに戻します。

Task

Taskは、バックグラウンドで実行されるプロセスのようなものです。redux-sagaベースのアプリケーションでは、複数のTaskを並列に実行できます。fork関数を使用してTaskを作成します。

import {fork} from "redux-saga/effects"

function* saga() {
...
const task = yield fork(otherSaga, ...args)
...
}

ブロッキングコール/非ブロッキングコール

ブロッキングコールとは、SagaがEffectを生み出して、実行結果を待ってから、生成ジェネレーター内の次の命令に進むことを意味します。

非ブロッキングコールとは、SagaがEffectを生み出した直後に再開することを意味します。

import {call, cancel, join, take, put} from "redux-saga/effects"

function* saga() {
yield take(ACTION) // Blocking: will wait for the action
yield call(ApiFn, ...args) // Blocking: will wait for ApiFn (If ApiFn returns a Promise)
yield call(otherSaga, ...args) // Blocking: will wait for otherSaga to terminate

yield put(...) // Non-Blocking: will dispatch within internal scheduler

const task = yield fork(otherSaga, ...args) // Non-blocking: will not wait for otherSaga
yield cancel(task) // Non-blocking: will resume immediately
// or
yield join(task) // Blocking: will wait for the task to terminate
}

Watcher/Worker

2つの別のSagaを使用して制御フローを編成する方法を指します。

  • ウォッチャー: ディスパッチされたアクションを監視し、すべてのアクションでワーカーを作成します。

  • ワーカー: アクションを処理して終了します。

function* watcher() {
while (true) {
const action = yield take(ACTION)
yield fork(worker, action.payload)
}
}

function* worker(payload) {
// ... do some stuff
}