Ich versuche, React-Boilerplate mit Redux-Saga innen zu implementieren. Also versuche ich einige Daten vom Server zu holen und dann auf eine andere Seite umzuleiten. Das Problem ist, dass vor der Umleitung Saga eine zweite Anfrage an den Server macht. Ich denke, es ist etwas falsch mit dem Abbrechen. Hier ist ein Teil meiner Code ist:Redux-Saga ruft Aktion nach Abbrechen
export function* fetchData() {
...
console.log('fetched');
yield browserHistory.push('/another-page');
}
export function* fetchDataWatcher() {
while (yield take('FETCH_DATA')) {
yield call(fetchData);
}
}
export function* fetchDataRootSaga() {
const fetchWatcher = yield fork(fetchDataWatcher);
yield take(LOCATION_CHANGE);
yield cancel(fetchWatcher);
}
export default [
fetchDataRootSaga
]
So in diesem Beispiel habe ich zwei Konsolenprotokolle, erscheint die zweite vor umleitet. Wie kann ich es reparieren?
Und eine andere Frage. Eigentlich habe ich mehr Funktionen in dieser Datei. Sollte ich "rootSaga" für jeden von ihnen erstellen oder ich kann sie alle in diesem fetchDataRootSaga() abbrechen? Ich meine, ist es normal, wenn ich Sagen auf diese Weise annulliere:
export function* fetchDataRootSaga() {
const watcherOne = yield fork(fetchDataOne);
const watcherTwo = yield fork(fetchDataTwo);
...
yield take(LOCATION_CHANGE);
yield cancel(watcherOne);
yield cancel(watcherTwo);
...
}
Vielen Dank im Voraus! P.S. Ich bin mir nicht sicher, ob dieser Code Best Practices ist. Es ist inspiriert von this repository
Ich habe genau wie du geschrieben, aber es gibt immer noch doppelte Anfrage an den Server. – th1rt3nth
Haben Sie überprüft, dass Sie die Aktion 'FETCH_DATA' nicht zweimal gesendet haben, was die Saga zweimal auslösen würde? Was passiert, wenn Sie take() zu takeLatest() ändern? – garajo