2017-01-12 9 views
0

Ich versuche, einige Anrufe zu Redux-Saga von Redux-Thunk zu bekommen, einige Fehler zu bekommen, ich bin neu auf Saga so hier die Codes Beispiele aus den 2 Funktionen von Saga und unten sind was ich tring wenn jemand tun kann ihr helfen, wird es eine große HilfeRedux-Thunk zu 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

Könnten Sie bitte einfügen, wie Sie Ihre Saga Middleware registriert? – gbozee

+0

Die Saga würde so aussehen '' 'Funktion * setLocale() { Ausbeute takeEvery (SET_LOCALE, getLocale) } ' '' die Aktion übergeben in die 'getLocale' Generatorfunktion. Werfen Sie einen Blick auf das Beispiel von der Homepage https://redux-saga.github.io/redux-saga/ – gbozee

Antwort

0

sein könnten Sie von takeEvery machen, die zwei params nehmen, um die Aktion konstant und den Generator zu betreiben. So könnte Ihr Beispiel aussehen dieses

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

und die getLocale bekommt die Aktion

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

Sie könnten das erste Beispiel überprüfen https://redux-saga.github.io/redux-saga/ für weitere Informationen.

0

Aktionen, die in Sagas ausgelöst werden, lösen Sagas aus.

Bedeutung Dies wird wahrscheinlich eine Endlosschleife verursachen oder einfach nicht funktionieren.

Sie müssen (leider) verschiedene Aktionstypen verwenden, um Sagas auszulösen und den Reducer aus einer Saga auszulösen.

Verwandte Themen