Argumente zu den saga-Versand – und Holen Sie das argument an den handler

Dies ist meine saga jetzt:

function* upAsyncSaga() {
    yield takeEvery(UP_ASYNC, upAsyncHandler);
}

Und hier ist die zugehörige sync-material:

const UP_ASYNC = 'UP_ASYNC';
export function upAsync() {
    return {
        type: UP_ASYNC
    }
}
function* upAsyncHandler() {
    yield call(wait, 1000);
    yield put(up());
}

const UP = 'UP';
export function up() {
    return {
        type: UP
    }
}

Ich trigger die upAsyncSaga dadurch store.dispatch(upAsync()). Allerdings möchte ich weitergeben argument genannt times. So will ich tun store.dispatch(upAsync(3)) und dann ich hoffe/will bekommen das argument an den handler wie dieser pseudocode:

export function upAsync(times) { //this is the argument "times"
    return {
        type: UP_ASYNC
        times //here it is again
    }
}
function* upAsyncHandler(times) { //i want the argument to get to the handler
    for (let i=0; i<times; i++) {
        yield call(wait, 1000);
        yield put(up());
    }
}

Ist das möglich?

InformationsquelleAutor Blagoh | 2017-07-31



One Reply
  1. 3

    Wenn wir Versand-jede Aktion zu speichern, wir können die Argumente enthalten (payload) wie folgt:

    store.dispatch( { type: UP_ASYNC, payload : { times: 2 }})
    

    ändern Ihre Funktion:

    export function upAsync(type, payload) {
      const { type, times } = payload
        return {
            type: type,
            times: times
        }
    }
    

    Ich bin nicht sicher, wie sich Ihre vollen store-Umsetzung ist, aber wenn Sie die folgenden redux-saga, die oben genannten sollten Sie beheben problem.

    Edit:

    Wenn Sie wiedermal store, welche Auswirkungen hat (glaube ich), dann kannst du einfach eine Aktion wie diese:

    dispatch({type: '<namespace>/upAsyncHandler', payload: {type: UP_ASYNC, times: 2}})
    

    Hier, ’namespace‘ bedeutet, dass Ihr Namensraum in der redux-Shop, wo Sie den handler definiert als ein Effekt. Siehe unten:

    *upAsynHandler(action, { call }) {
      const { type, times } = action
      const res = yield call(wait, times)
    }
    
    • Dank Umesh, aber wie kann ich das payload zu upAsyncHandler?
    • Vielen Dank, endlich verstehe ich jetzt. Bitte entschuldigen Sie meine Verspätung bei der Annahme der Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.