Redux-Thunk到Redux-Saga

时间:2017-01-12 19:06:37

标签: reactjs redux-thunk redux-saga

我试图从redux-thunk传递一些来自redux-saga的调用我得到一些错误,我在saga上的新内容所以这里来自saga及以下的2个函数的代码示例是如果有人可以帮助的话要做什么我将是一个很大的帮助

var LOAD_TRANSLATIONS = exports.LOAD_TRANSLATIONS = 'loadTranslation';
// redux-thunk
var loadTranslations = exports.loadTranslations = function   loadTranslations(translations) {
 return function (dispatch) {
     _index.I18n.forceComponentsUpdate();
     dispatch({
         type: LOAD_TRANSLATIONS,
         translations: translations
     });
  };
 };

// saga
function* loadTranslations() {
    const lang = yield take(LOAD_TRANSLATIONS);
    yield fork(getLang, lang);
}

function* getLang(lang){
    console.log(lang);
    yield put({
        type: LOAD_TRANSLATIONS,
    translations: lang
 });
}


// redux-thunk
var SET_LOCALE = exports.SET_LOCALE = 'setLocal';

var setLocale = exports.setLocale = function setLocale(locale) {
  return function (dispatch) {
    _index.I18n.forceComponentsUpdate();
    dispatch({
      type: SET_LOCALE,
      locale: locale
    });
  };
};


//saga
function* setLocale() {
 const locale = yield take(SET_LOCALE);
 yield fork(getLocale, locale);
}

function* getLocale(locale){
 console.log(locale);
 _index.I18n.forceComponentsUpdate();
 yield put({
     type: SET_LOCALE,
     locale: locale
 });
}

2 个答案:

答案 0 :(得分:0)

你可以使用takeEvery,它需要两个参数,动作常量和生成器才能运行。所以你的例子可能看起来像这样

function* setLocale(){
    yield takeEvery(SET_LOCALE, getLocale)
}
# you could use takeEvery or takeLatest

并且getLocale获取正在传递的操作

function* getLocale(action){
    console.log(action);
    _index.I18n.forceComponentsUpdate();
     yield put({
        type: SET_LOCALE,
        locale: action.locale
     });

您可以查看https://redux-saga.github.io/redux-saga/上的第一个示例以获取更多信息。

答案 1 :(得分:0)

在传奇中发出的行动将触发传奇。

这意味着这可能会导致无限循环或只是不起作用。

你必须使用(不幸的是)不同的动作类型来触发传奇并从传奇中触发减速器。