概要
- raisls + webpackerでredux-sagaを導入したら、
regeneratorRuntime is not defined
が発生 - (redux-sagaのためにはじめて)定義したジェネレータ関数
function*
が原因 - babel-polyfilで変換してやれば解決
環境
- Rails: 5.1.4
- webpacker: 3.0.2
- redux-saga: 0.16.0
- Reduxの非同期処理ライブラリをいろいろ試してみた!を参考にredux-sagaのコードを書いた。
エラー
対象のコード
sagaが原因ではなく、ジェネレータ関数function*
が原因なので本質的ではないですが、参考までにエラー対象のファイルを示します。
app/javascript/sagas/mySaga.js
import {call, takeLatest} from 'redux-saga/effects'
import {getColor} from '../modules/Api'
import {FETCH_COLOR} from '../actions/items'
export function* fetchColorFlow() {
const response = yield call(getColor)
if (response) {
console.log(response)
}
}
function* mySaga() {
yield takeLatest(FETCH_COLOR, fetchColorFlow);
}
export default mySaga;
エラー内容
Uncaught ReferenceError: regeneratorRuntime is not defined
解決方法
babel-polyfilをインストールしてジェネレータ関数を使うファイルで読み込めばOK。
- インストール
yarn add babel-polyfil
- 読み込む
app/javascript/sagas/mySaga.js
import {call, put, takeLatest} from 'redux-saga/effects'
import {getColor} from '../modules/Api'
import {FETCH_COLOR} from '../actions/items'
import 'babel-polyfill' // これを読み込む
// 以下同じなので省略