2017-01-12 2 views
0

im пытается передать некоторые призывы к редукции-саге от redux-thunk im получить некоторую ошибку, im new на саге, поэтому здесь примеры кода из двух функций из саги и ниже - это то, что им делать, если кто-нибудь может помочь мне, что это будет большая помощьRedux-Thunk to Redux-Saga

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 
}); 
} 
+0

Не могли бы вы вставить, как вы зарегистрировали свое промежуточное программное обеспечение для саги? – gbozee

+0

сага будет выглядеть следующим образом '' 'функции * Setlocale() { выход takeEvery (SET_LOCALE, GetLocale) } ' '' действие передается в функцию генератора 'getLocale'. Взгляните на пример с домашней страницы https://redux-saga.github.io/redux-saga/ – gbozee

ответ

0

Вы можете использовать takeEvery, который принимает два Params, константу действия и генератор для запуска. Так что ваш пример может выглядеть следующим образом

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/ для получения дополнительной информации.

0

Действия, отправленные в сагах, будут вызывать саги.

Значение этого, скорее всего, вызовет бесконечный цикл или просто не сработает.

Вы должны использовать (к сожалению) различные типы действий для запуска саг и запуска редуктора из саги.