redux-sagaに全く新しいので、私はアクションLANGUAGE_START_CYCLE
に反応し、アクションLANGUAGE_CYCLE
を3秒ごとに循環させるサガを設定しようとしています。Redux Sagaを使用してX秒ごとにアクションを送信
しかし、私がLANGUAGE_START_CYCLE
をReduxストアにディスパッチすると、サガLANGUAGE_CYCLE
は決して実行されません。
私が間違っていることは何ですか?私は他のサガがうまく動いているので、それは単純な間違いであると思われる。作業している私の他のサガの一つの
// constants/ActionTypes.js
export const LANGUAGE_SET_ACTIVE = "LANGUAGE_SET_ACTIVE";
export const LANGUAGE_START_CYCLE = "LANGUAGE_START_CYCLE";
export const LANGUAGE_STOP_CYCLE = "LANGUAGE_STOP_CYCLE";
export const LANGUAGE_CYCLE = "LANGUAGE_CYCLE";
// actions/language.js
export const cycleLanguage =() => {
return {
type: ActionTypes.LANGUAGE_CYCLE
}
};
// languageSaga.js
import { actionChannel, call, take, put, race } from 'redux-saga/effects'
import * as ActionTypes from '../constants/ActionTypes';
import * as actions from '../actions/language';
const wait = ms => {
new Promise(resolve => {
setTimeout(() => resolve(), ms)
})
};
export default function * languageSaga() {
const channel = yield actionChannel(ActionTypes.LANGUAGE_START_CYCLE);
while (yield take(channel)) {
while (true) {
const { stopped } = yield race({
wait: call(wait, 3000),
stopped: take(ActionTypes.LANGUAGE_STOP_CYCLE)
});
if (!stopped) {
yield put(actions.cycleLanguage());
} else {
break;
}
}
}
}
// sagas.js (root sagas)
export default function * sagas() {
yield [
directorySaga(), // Another saga which works fine
pusherSaga(), // Another saga which works fine
languageSaga()
]
}
例:
// directorySaga.js
function * fetchDirectory(action) {
try {
const directory = yield call(Api.fetchDirectory, action.id);
yield put(fetchDirectorySucceeded(directory));
} catch (e) {
yield put(fetchDirectoryFailed(e.message));
}
}
export default function * directorySaga() {
yield * takeLatest(ActionTypes.DIRECTORY_REQUESTED, fetchDirectory);
}
申し訳ありませんが、実際に何がうまくいかないのかは分かりませんので、お手伝いするのは難しいです。あなたは何を派遣しますか、何を期待しますか、あなたは何を得ますか? –
問題は、私が 'LANGUAGE_START_CYCLE'をディスパッチしたとき、サガはレースエフェクトを実行しないということです。私はどこにでもキャッチしようとしましたが、出力はありません。この問題のトラブルシューティング方法に関するヒント? – janhartmann
ログを記録し、どのファイルが印刷されるかどうかを指定します。私はあなたがそこにループに入るかどうかわからない: –