2017-11-23 1 views
0

Ich habe über die Struktur der Saga gedacht und mit einem Ansatz comed, aber weiß nicht, ob es richtig ist oder nicht.was für Redux Saga eine bessere Struktur ist

Zum Beispiel habe ich mehrere Saga-Dateien, und für jede typische Saga-Datei gibt es eine Wächter-Saga, die verschiedene Aktionen "gleichzeitig" überwacht. Und dann müssen wir diese Wächter-Sage nur als Standard exportieren.

Hier ist mein vorläufiger Ansatz:

I abot die Art, wie ich Gruppe

/** 
* saga.js 
* 
* one watcher saga watch multiple actions concurrently 
* However, from my research, I can only see that everyone seems to create 
* multiple watcher sagas, and each watcher only watch single action which is 
* sort of verbose 
*/ 
function* watchSomething() { 
    yield all([ 
    takeLatest(GET_SOMETHING, callGetSomething), 
    takeLatest(GET_SOMETHING_2, callGetSomething_2), 
    takeLatest(GET_SOMETHING_3, callGetSomething_3), 
    ]); 
} 
export default watchSomething; 

Und

/** 
* rootSaga.js 
* 
* import different watcher sagas from different saga.js files 
*/ 
export default function* root() { 
    yield all([ 
    watchSomething(), 
    watchSomething_2(), // the others ... 
    ]); 
}; 

Antwort

0

Ich bin nicht sicher abot der Beobachter Sagas nicht sicher bin, die Art, wie ich Gruppe der Beobachter Saga

Allgemeines redux-saga ist async Prozess-Manager und ermöglicht mit der Anmeldung und zum Emittieren Ereignisse auf verschiedene Weise zu manipulieren.
Einfachste Möglichkeit besteht aus der Verwendung von takeEvery/takeLatest Funktionen, und dann sagaprocess manager wird automatisch unabhängigen Prozess (formell Tick Callback-Domain, da ES Single-Threaded) für jede gefangene Aktion.

Aber Sie können leicht eigene saga-Prozess von fork-Effekt spawnen, und mit Aktionen in benutzerdefinierter Weise zu manipulieren. Wenn Steuerfluss auf Manipulation gleiche gilt für viele Aktionen, können Sie Generator Schleife mit anschließender Handhabung auszuführen:

function * manyActionsSaga() { 
    let flowPromise = Promise.resolve(); 
    while(true) { 
     const action = yield take(['ACTION_1', 'ACTION_2', 'ACTION_3']); 
     yield call(() => flowPromise) 
     flowPromise = flowPromise.then(() => { 
      // Similar event handling 
     }) 
    } 
} 

Natürlich können Sie auch eine Verarbeitungsfunktion für jede Aktionen Gruppe haben, und bind es dann jeweils mit Ziel Argumente .