J'essaie de voir (par curiosité) à quel point il serait complexe de réimplémenter le comportement de base redux/redux-observable avec des Rxjs purs.Réimplement redux observable avec seulement RxJs?
Voici mon point de vue, mais il semble incroyablement simple d'avoir raison. Quelqu'un peut-il me signaler des erreurs/défauts dans ma logique?
Merci beaucoup
// set up the store.dispatch functionnaly through a subject (action$.next() is like store.dispatch())
var action$ = new Rx.Subject()
// Create epics that do nothing interesting
function epic1(action$) {
return action$.filter(action => action.type == "test").delay(1000).mapTo({
type: "PONG"
})
}
function epic2(action$) {
return action$.filter(action => action.type == "test2").delay(2000).mapTo({
type: "PING"
})
}
//....
//Later on, Merge all epic into one observable
//
function activateAndMergeEpics(action$, ...epics) {
// give the action$ stream to each epic
var activatedArray = epics.map(epic => epic(action$))
// merge them all into one megaObservable
var merged = Rx.Observable.merge(...activatedArray)
return merged
}
var merged = activateAndMergeEpics(action$, epic1, epic2)
// Pipe your megaObservable back inside the loop so
// you can process the action in your reducers
var subscription = merged.subscribe(action$)
function rootReducer(state = {}, action) {
console.log(action)
return (state)
}
// Generate your state from your actions
var state$ = action$.scan(rootReducer, {})
// Do whatever your want now, like...
// state$.map(route).map(renderdom)
// Let's juste subscribe to nothing to get the stream pumping
state$.subscribe()
// Simulate a dispatch
action$.next({
type: "test"
})
// Another one
action$.next({type:"test2"})
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.3/Rx.min.js"></script>
Wow, réponse du créateur lui-même, cool! Merci pour votre conseil et votre réponse! J'avais déjà lu le "pourquoi vous l'avez fait avec Redux et pas à partir de zéro?" de l'article de Ben Lesh ici: [article de Ben Lesh] (https://medium.com/@benlesh/redux-observable-ec0b00d2eb52) – TheoH
De rien! – jayphelps