1 of 91

DÉVELOPPEURS ANGULAR :

La dernière conférence RxJS

dont vous aurez besoin ...

2 of 91

Angular… et RxJS ?

🤔

3 of 91

4 of 91

Développeurs Frontend : React, Vue, Vanillia…

5 of 91

50% Grenoblois, 50% Codeur

6 of 91

Mes “Senseïs”

7 of 91

PR du tuyau d’arrosage : refusé !

8 of 91

Epiphany Bridge Origin Story

9 of 91

Un simple champ de recherche…

10 of 91

Une première approche naïve

11 of 91

Une approche naïve ~100 lignes de code

🤔 Trop de requêtes : Attendre 300ms avant d’envoyer la requête...

🤔 Requêtes peu pertinentes : Terme de recherche “a” ou “ab”...

🤔 Gestion de l’asynchrone : Les requêtes en cours doivent être annulées avant d’envoyer une nouvelle requête…

🤔 Performance : 2 requêtes avec le même terme de recherche sont envoyées, alors qu’on pourrait ré-afficher les mêmes suggestions.

🤔 Si une requête HTTP échoue : On pourrait retenter une connexion au moins une fois.

🤔 Gestion des erreurs : Afficher l’ancien état.

12 of 91

Le “Futur” ?

13 of 91

Solution au “Hello, World” de RxJS

14 of 91

Solution au “Hello, World” de RxJS

15 of 91

Solution au “Hello, World” de RxJS

16 of 91

Une approche réactive ~10 lignes de code

✅ Trop de requêtes : Attendre 300ms avant d’envoyer la requête...

✅ Requêtes peu pertinentes : Terme de recherche “a” ou “ab”...

✅ Gestion de l’asynchrone : Les requêtes en cours doivent être annulées avant d’envoyer une nouvelle requête…

✅ Performance : 2 requêtes avec le même terme de recherche sont envoyées, alors qu’on pourrait ré-afficher les mêmes données.

✅ Si une requête HTTP échoue : On pourrait retenter une connexion au moins une fois => retry(1)

✅ Gestion des erreurs : Afficher l’ancien état => catchError()

17 of 91

C’est quoi, le paradigme réactif ? Modéliser le temps.

18 of 91

Les 3 Stratégies de la Pyramide de la Réactivité

#1 S’équiper : 100 Opérateurs RxJS en 10 minutes…

#2 Ascension face nord : Le mapping asynchrone !

#3 La redescente : Admirer la vue… depuis le sommet.

19 of 91

Stratégie #1 : S’équiper.

Apprendre 100 opérateurs en 10 minutes…

20 of 91

Apprenez les opérateurs au lieu d’utiliser subscribe !

21 of 91

PR tuyau d’arrosage

22 of 91

Stratégie #1

Apprendre 100 opérateurs en 10 minutes…

#1 : “Aha moment” Les événements sont-ils des tableaux ?

#2 : “Aha moment” Mettre fin au code multidimensionnel

#3 : “Aha moment” Les opérateurs en actions

23 of 91

#1 Les événements sont-ils des tableaux ?

24 of 91

#1 Les événements sont-ils des tableaux ?

25 of 91

#1 Les événements sont-ils des tableaux ?

26 of 91

#1 Les événements sont-ils des tableaux ?

27 of 91

#1 Les événements sont-ils des tableaux ?

28 of 91

#1 Les événements sont-ils des tableaux ?

29 of 91

#1 Les événements sont-ils des tableaux ?

30 of 91

#1 Les événements sont-ils des tableaux ?

31 of 91

#1 Les événements sont-ils des tableaux ?

32 of 91

#1 Les événements sont-ils des tableaux ?

33 of 91

#1 Ajouter le temps

34 of 91

#1 Les événements sont-ils des tableaux ?

35 of 91

#1 Les événements sont-ils des tableaux ?

36 of 91

Stratégie #1

Apprendre 100 opérateurs en 10 minutes…

✅ : “Aha moment” Les événements sont-ils des tableaux ?

#2 : “Aha moment” Mettre fin au code multidimensionnel

#3 : “Aha moment” Les opérateurs en actions

37 of 91

#2 Mettre fin au code multidimensionnel

38 of 91

#2 Mettre fin au code multidimensionnel

39 of 91

#2 Mettre fin au code multidimensionnel

40 of 91

#2 Mettre fin au code multidimensionnel

41 of 91

Stratégie #1

Apprendre 100 opérateurs en 10 minutes…

✅ : “Aha moment” Les événements sont-ils des tableaux ?

✅ : “Aha moment” Mettre fin au code multidimensionnel

#3 : “Aha moment” Les opérateurs en actions

42 of 91

#3 Les opérateurs en actions

43 of 91

#3 Les opérateurs en actions

44 of 91

#3 Les opérateurs en actions

45 of 91

Stratégie #1

Apprendre 100 opérateurs en 10 minutes…

✅ : “Aha moment” Les événements sont-ils des tableaux ?

✅ : “Aha moment” Mettre fin au code multidimensionnel

✅ : “Aha moment” Les opérateurs en actions

46 of 91

Stratégie #2

Ascension face nord : Le mapping asynchrone.

47 of 91

Le mapping asynchrone… en terrasse !

48 of 91

Stratégie #2

Ascension face nord : Le mapping asynchrone.

#1 : Les 3 types d’événements : froid, tiède et chaud

#2 : Créer des flux d’événements sur mesure

#3 : Les opérateurs concatMap, mergeMap, switchMap et exhaustMap !

49 of 91

#1 Les 3 types d’événements

50 of 91

#1 Les 3 types d’événements

51 of 91

#1 Les 3 types d’événements : Froid

52 of 91

#1 Les 3 types d’événements : Tiède

53 of 91

#1 Les 3 types d’événements : Chaud !

54 of 91

Stratégie #2

Ascension face nord : Le mapping asynchrone.

✅ : Les 3 types d’événements : froid, tiède et chaud

#2 : Créer des flux d’événements sur mesure

#3 : Les opérateurs concatMap, mergeMap, switchMap et exhaustMap !

55 of 91

#2 Créer des flux d’événements sur mesure

56 of 91

57 of 91

#2 Créer des flux d’événements sur mesure

58 of 91

Stratégie #2

Ascension face nord : Le mapping asynchrone.

✅ : Les 3 types d’événements : froid, tiède et chaud

✅ : Créer des flux d’événements sur mesure

#3 : Les opérateurs concatMap, mergeMap, switchMap et exhaustMap !

59 of 91

#3 ConcatMap, MergeMap, SwitchMap & ExhaustMap

60 of 91

#3 ConcatMap, MergeMap, SwitchMap & ExhaustMap

61 of 91

#3 ConcatMap, MergeMap, SwitchMap & ExhaustMap

62 of 91

Stratégie #2

Ascension face nord : Le mapping asynchrone.

✅ : Les 3 types d’événements : froid, tiède et chaud

✅ : Créer des flux d’événements sur mesure

✅ : Les opérateurs concatMap, mergeMap, switchMap et exhaustMap !

63 of 91

Stratégie #3

La redescente : Admirer la vue… depuis le sommet.

64 of 91

Les Signals vont remplacer les Observables !?

65 of 91

Signals API ?

66 of 91

Stratégie #3

La redescente : Admirer la vue… depuis le sommet.

#1 : Problème ! … Signal vs. Zone.js

#2 : Problème ! … Signal vs. DeepSignal

#3 : Problème ! … Signal vs. Subscribe

67 of 91

#1 Signal vs Zone.js

68 of 91

#1 Signals ou Observables dans les composants ?

Les Signals sont les “cousins synchrones” des Observables…

69 of 91

#1 Signal vs Zone.js : Comprendre le “Glitch-free”

70 of 91

#1 Signal vs Zone.js

71 of 91

Stratégie #3

La redescente : Admirer la vue… depuis le sommet.

✅ : Problème ! … Signal vs. Zone.js

#2 : Problème ! … Signal vs. DeepSignal

#3 : Problème ! … Signal vs. Subscribe

72 of 91

#2 Signal vs DeepSignal

API Simple et efficace, c’est parti !

73 of 91

#2 Signal vs DeepSignal

Signal = Opérations immutables …

74 of 91

#2 Signal vs DeepSignal

75 of 91

#2 Signal vs DeepSignal : Signal State

76 of 91

#2 Signal vs DeepSignal : Signal Store

BehaviorSubject to signal

77 of 91

#2 Signal vs DeepSignal

78 of 91

Stratégie #3

La redescente : Admirer la vue… depuis le sommet.

✅ : Problème ! … Signal vs. Zone.js

✅ : Problème ! … Signal vs. DeepSignal

#3 : Problème ! … Signal vs. Subscribe

79 of 91

#3 Effect vs Subscribe

Comment gérer des événements “chauds” avec un Signal ?

80 of 91

#3 Effect vs Subscribe : Mauvaise comparaison…

81 of 91

#3 Effect vs Subscribe : Nooon !

82 of 91

#3 Effect vs Subscribe : Utiliser toObservable

83 of 91

#3 Effect vs Subscribe : Utiliser rx.Method

84 of 91

#3 Effect vs Subscribe : Utiliser rx.Method

85 of 91

Stratégie #3

La redescente : Admirer la vue… depuis le sommet.

✅ : Problème ! … Signal vs. Zone.js

✅ : Problème ! … Signal vs. DeepSignal

✅ : Problème ! … Signal vs. Subscribe

86 of 91

Comment démarrer sur la réactivité en 2 minutes ?

87 of 91

Merci à nos Sponsors, Experts & à Avisto

88 of 91

Des questions ?

89 of 91

90 of 91

#1 Signal vs DeepSignal

91 of 91

#1 Signal vs DeepSignal

Code signal in component