148 votes

Pourquoi utiliser Redux-Observable sur Redux-Saga?

J'ai utilisé Redux-Saga. Le Code écrit à il est facile de raison, jusqu'à présent, à l'exception de JS générateur de fonction est la pagaille dans ma tête de temps en temps. De ma compréhension, Redux Observables peut réaliser le travail similaire qui gère les effets secondaires mais sans l'aide du générateur de fonction.

Cependant, les docs de Redux Observables ne fournit pas beaucoup d'idées de pourquoi il est supérieur à l'encontre de Redux-Saga. Je voudrais savoir si pas à l'aide du générateur de fonction est le seul avantage de l'utilisation de Redux-Observables. Et quels pourraient être les inconvénients, gotcha ou compromis de l'aide Redux Observables au lieu de Redux-Saga? Merci à l'avance.

264voto

jayphelps Points 10591

Clause de non-responsabilité: je suis l’un des auteurs de redux-observable, c’est donc difficile pour moi d’être impartial à 100%.

Nous ne fournissons actuellement aucune raison pour laquelle redux-observable est préférable à redux-saga parce que ... ce n'est pas le cas.

69voto

Wayne Chiu Points 2459

Je pense qu'il y a des choses que vous devez prendre en considération.

  1. La complexité
  2. Style De Codage
  3. La Courbe D'Apprentissage
  4. La testabilité

Disons que nous voulons aller chercher de l'utilisateur de l'API

// Redux-Saga

import axios from 'axios' 

function* watchSaga(){
  yield takeEvery('fetch_user', fetchUser) // waiting for action (fetch_user)
}

function* fetchUser(action){
    try {
        yield put({type:'fetch_user_ing'})
        const response = yield call(axios.get,'/api/users/1')
        yield put({type:'fetch_user_done',user:response.data})
  } catch (error) {
        yield put({type:'fetch_user_error',error})
  }
}

// Redux-Observable
import axios from 'axios'

const fetchUserEpic = action$ => 
    action$
        .ofType('fetch_user')
        .flatMap(()=>
          Observable.from(axios.get('/api/users/1')) // or use Observable.ajax
            .map(response=>({type:'fetch_user_done', user:response.data}))
            .catch(error => Observable.of({type:'fetch_user_error',error}))
            .startWith({type:'fetch_user_ing'})
        )

Aussi, j'ai écrit cet article afin de comparer les différences entre Redux-saga et Redux Observables dans la profondeur. Découvrez ce lien ici ou présentation.

25voto

ThorbenA Points 628

J'utilise Redux Observables sur Redux-Saga parce que préfèrent travailler avec des observables sur les générateurs. Je l'utilise avec RXJS, qui est un puissant bibliothèque pour travailler avec des flux de données. Pensez-y comme lodash pour async. En termes de tout des inconvénients, gotcha et de compromis dans le choix de l'un sur l'autre, jetez un oeil à cette réponse de Jay Phelps:

redux-saga comme un projet existe depuis plus de redux observables alors que c'est certainement un argument de vente majeur. Vous trouverez plus de la documentation, des exemples, et susceptibles d'avoir une meilleure communauté pour obtenir de l'assistance.

Le compteur étant que les opérateurs et les Api que vous apprenez dans redux-saga ne sont pas presque aussi transmissible que l'apprentissage de la RxJS, qui est utilisé partout dans l'endroit. redux-observable est super super super simple à l'interne, c'est vraiment juste vous donner un moyen naturel pour vous d'utiliser RxJS. Donc si vous connaissez RxJS (ou voulez), c'est un très naturelle.

Mon avis pour le moment pour la plupart des gens, c'est que si vous vous posez lequel vous devez utiliser, vous devriez probablement choisir redux-saga.

15voto

Denis Rybalka Points 538

Redux-Observable est une bibliothèque incroyable, nous l'utilisons dans la production de 1,5 ans sans aucun problème jusqu'à présent, il est parfaitement vérifiable et peut être facilement intégré à n'importe quel cadre. Nous avons surchargés parallèle socket canaux et la seule chose qui est en nous sauvant de se fige est Redux Observables

J'ai 3 points que je tiens à mentionner ici.

1. La complexité et la courbe d'apprentissage

Redux-saga bat facilement redux observables ici. Si vous avez besoin d'une simple demande pour obtenir l'autorisation de faire et que vous ne souhaitez pas utiliser redux-thunk pour certaines raisons, vous devriez envisager d'utiliser redux-saga, c'est juste plus facile à comprendre.

Si vous n'avez pas de connaissance préalable de l'Observable, il va être une douleur pour vous et votre équipe sera sûr de vous :)

2. Ce qui peut Observables et RxJS offrent à moi?

Quand il s'agit de logique asynchrone Observable est votre couteau Suisse, Observable peut littéralement faire presque tout pour vous. Vous devriez ne jamais les comparer à des promesses ou des générateurs, il est beaucoup plus puissant, c'est même comme comparer Optimus Prime avec Chevrolet.

Et que dire de RxJS? C'est comme lodash.js mais pour async logique, une fois que vous vous ne serez jamais passer à quelque chose de différent.

3. Extension de réactif

Il suffit de vérifier ce lien

http://reactivex.io/languages.html

L'extension de réactif est mis en œuvre pour tous les langages de programmation modernes, c'est juste votre clé à la programmation fonctionnelle.

Afin de passer votre temps à bon escient apprendre RxJS et l'utilisation redux observables :)

10voto

Dean Radcliffe Points 694

J'apprécie la transférabilité entre les langues et les temps d'exécution de Rx. Même si votre application ne change pas de langue, votre carrière peut l'être. Tirez le meilleur parti possible de votre apprentissage, quelle que soit votre taille. C'est une si grande passerelle vers .NET LINQ en particulier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X