window.pipedriveLeadboosterConfig = { base : 'leadbooster-chat.pipedrive.com', companyId : 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version : 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster existe déjà') } else { w.LeadBooster = { q : [], on : function (n, h) { this.q.push({ t : 'o', n : n, h : h }) }, trigger : function (n) { this.q.push({ t : 't', n : n }) }, } } })() Passer de Redux à MobX - The Codest
The Codest
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Industries
    • Fintech et banque
    • E-commerce
    • Adtech
    • Santé (Healthtech)
    • Fabrication
    • Logistique
    • Automobile
    • IOT
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
Flèche arrière RETOUR
2022-02-17
Développement de logiciels

Passer de Redux à MobX

Paweł Chmielecki

Le jour où vous devez vous familiariser avec une technologie différente est en fait tous les jours dans la vie d'un développeur. Dans ce scénario particulier, j'ai atterri dans un projet qui s'est avéré être le dernier au sein de l'entreprise qui utilise Redux pour gérer l'état dans l'application React.

Pourquoi sommes-nous ici ?

Tôt ou tard, nous le déplacerons vers la rubrique MobX comme nous l'avons fait pour les autres applications. C'est pourquoi j'ai décidé d'y jeter un coup d'œil rapide. Il n'y aura pas tant de code et je pense que vous avez déjà entendu parler de Redux. Commençons.

Qu'est-ce que Redux ?

Comme indiqué à l'adresse suivante redux.js.orgIl s'agit d'un "état prévisible du conteneur pour les JS Apps." Il a été créé par Dan Abramov et Andrew Clark en 2015.
Il peut être décrit par 3 principes:

  1. Un seul point de vérité - l'état est conservé dans un seul magasin,
  2. L'état est en lecture seule - vous ne pouvez pas modifier directement l'état, vous devez émettre une action pour le faire,
  3. Les modifications sont effectuées à l'aide de fonctions pures - par définition, les fonctions pures renvoient toujours les mêmes résultats pour des paramètres donnés, peuvent être exécutées en permanence et n'ont pas d'effets secondaires.

Qu'est-ce que MobX ?

Ce n'est pas une surprise, MobX est également une bibliothèque de gestion d'état, elle applique de manière transparente la programmation fonctionnelle réactive (TFRP) pour la rendre simple et évolutive. Comme pour la bibliothèque précédente, sa philosophie est décrite en 3 points :
1. Simplicité - code minimaliste, sans chaudière, et aucun outil spécial n'est nécessaire pour le faire fonctionner,
2. Rendu optimal sans effort - il s'assure que tous les calculs sont bien optimisés et qu'il n'est pas nécessaire de le faire manuellement,
3. Liberté architecturale - la mise en œuvre est libre de toute contrainte et peut être utilisée sans cadre d'interface utilisateur.

Comparaison entre MobX et Redux

Apprentissage

React est réputé pour la sérieuse documentation qu'il contient lors de la configuration initiale. Vous ne pouvez pas la négliger. En particulier lorsque vous avez une application plus importante avec beaucoup de reducers et d'actions, vous avez probablement déjà décidé de garder les types d'actions comme constantes dans les chaînes, ce qui est une bonne approche, mais il y a alors encore plus de code ! Heureusement, la fonction Boîte à outils Redux est de plus en plus populaire et il est désormais recommandé d'écrire Redux logique. Si vous voulez mon avis, j'aime ça ! Il y a encore beaucoup à apprendre, mais la simple configuration de base avec la boîte à outils fait l'affaire.

Lorsque j'ai regardé le Documentation MobXJ'étais comme un enfant qui a accidentellement atterri dans une chocolaterie. En parcourant les exemples, je n'arrêtais pas de me demander comment cela pouvait fonctionner, mais c'est le cas et apparemment, c'est bien fait. Mais peut-être que le fait de gérer tous les reducers, actions, middlewares et autres choses fait qu'il est si facile d'être fasciné par quelque chose d'autre. Néanmoins, si vous êtes familier avec la POO, MobX vous viendra naturellement. Il y a beaucoup moins de codage initial et beaucoup de choses se passent dans les coulisses, de sorte que vous n'avez pas besoin de vous en préoccuper dans la plupart des cas.

Structure des données - que contient l'état ?

En Reduxnous devons utiliser des primitives, des tableaux ou de simples JS en tant que données pour notre État.
De plus, il existe une pratique courante lorsque vous stockez des données dans des tableaux, à savoir les normaliser pour des raisons de performance. Malheureusement, même avec les fonctions d'aide de la boîte à outils de Redux (par exemple, createEntityAdapter) qui ajoute encore du code supplémentaire.

En MobXNous créons des propriétés, des objets entiers, des tableaux, des cartes et des ensembles. observable. Oui, les primitives ne sont pas mentionnées ici parce que leurs valeurs dans les JS sont immuables et c'est pourquoi ils doivent être traités différemment. Tout ce que vous devez savoir si vous optez pour une observable est qu'il enveloppera la primitive dans une "boîte" et que les valeurs getter et setter seront disponibles par l'intermédiaire de .get() et .set(newValue) respectivement voir observable.box(value)

import { observable, autorun } from "mobx"

const cityName = observable.box("Vienna") // identique à observable("Vienna")

autorun(() => {
    console.log(cityName.get())
})
// Imprime : 'Vienne'

cityName.set("Amsterdam")
// Imprime : 'Amsterdam' : 'Amsterdam'

Il n'est pas nécessaire de normaliser les données, car MobX observable` clone l'objet, le rend observable et, par conséquent, s'assure que tous les changements sont reflétés dans le magasin dès que nous mettons à jour l'une des propriétés observables.

Localisation des données - magasin(s)

Nous disposons d'une source unique de vérité en Redux. En conservant l'état à un seul endroit, nous nous assurons que les données ne sont pas dupliquées dans toute l'application et qu'elles sont plus faciles à déboguer.

MobX encourage en fait à avoir au moins deux magasins distincts, un pour l'état de l'interface utilisateur et un ou plusieurs pour l'état du domaine. Cette séparation nous permet de réutiliser le domaine dans différentes applications.

Parce que nous ne sommes pas limités à JS il semble naturel de créer ses propres classes pour des objets de domaine particuliers, comme le suggèrent les auteurs. Ici, Mobx brille pour ceux d'entre vous qui aiment la programmation orientée objet. Vous pouvez avoir des méthodes, contrôler ce qui doit être observable ou non. En outre, nous pouvons combiner plusieurs magasins et partager les références.

Immuable et mutable

Redux exige que la mise à jour de l'état ne mute pas l'état d'origine. Ainsi, si nous voulons ajouter un nouvel élément à un tableau existant, nous devons renvoyer une nouvelle instance au lieu d'ajouter simplement cet élément au tableau actuel.

function todoReducer(state = [], action) {
    // nous créons ici un nouveau tableau et utilisons un opérateur de diffusion pour conserver les anciennes valeurs
    return [
      ...state,
     action.payload
    ]
}

Ensuite, en MobXnous pouvons modifier les propriétés observables, ici : l'élément todos tableau. Remarquez que nous modifions le tableau original dans addTodo

class ObservableTodoStore {
  todos = [] ;

  constructor() {
    makeObservable(this, {
      todos : observable,
      addTodo : action,
    }) ;
    autorun(() => console.log(this.todos.length))
  }


  addTodo(task) {
    /ici nous ne faisons que pousser le nouvel élément dans le tableau existant !
    this.todos.push({
      task : task,
      completed : false,
    }) ;
  }

}

const observableTodoStore = new ObservableTodoStore() ;
observableTodoStore.addTodo("Une chose difficile à faire") ;

De plus, nous pouvons même mettre à jour directement le fichier todo et nous verrons que exécution automatique sera déclenché (il remarquera un changement dans le tableau observable de todos).

observableTodoStore.todos.push("Une autre tâche difficile") ;

// Ce qui est plus intéressant, c'est que ce n'est que lorsque vous mettez à jour la propriété du to-do en question
// MobX vous avertira (en mode strict) que vous ne devriez pas le faire directement
observableTodoStore.todos[1].task = ("Maybe something more effortless") ;

Débogage

Personnellement, j'aime beaucoup le Chrome Extension Redux DevTools. Il vous permet d'avoir un aperçu rapide de l'état de votre application et a des capacités intéressantes pour aller et venir pour chaque changement d'état (voyage dans le temps !). Tout cela est possible grâce au principe de non-mutation de l'état précédent.

La couche supplémentaire d'abstraction du magasin rend le processus de débogage plus difficile. Les MobX Extension Chrome me semble très lourd, surtout si on le compare à l'expérience précédente, mais peut-être ai-je besoin d'un peu de temps pour m'y habituer.

Mais nous avons, par exemple, la exécution automatique que vous utiliserez probablement beaucoup lorsque vous commencerez à utiliser le logiciel MobX et de vérifier si l'état change. Vous devez noter que la fonction ne suivra que les changements qu'elle observe. Cela est déterminé une fois que la fonction est exécutée pour la première fois. MobX s'abonnera à tous les observables qui ont été lus lors de cette première invocation et se déclenchera à chaque fois qu'ils changeront.

Popularité

Si l'on considère la popularité, Redux l'emporte ici. Près de 4M téléchargements de npm par semaine par rapport à 450k pour MobX. De plus, le nombre de contributeurs (~870 > 270) et d'étoiles (57k > 24k) sur le dépôt GitHub pour chaque bibliothèque montre que Redux est une marque bien connue.

D'autre part, Rapport sur l'état de la JS en 2020 montre que la satisfaction liée à leur utilisation est pratiquement la même, ce qui ne vous aidera certainement pas à choisir celui que vous utiliserez pour votre prochain voyage. projet.

Tableau de satisfaction des bibliothèques de la couche de données sur l'état de la JS 2020

La satisfaction dans ce tableau a été décrite comme "j'utiliserais à nouveau / (j'utiliserais à nouveau + je n'utiliserais pas à nouveau)"

Conclusion

Il n'y a pas de gagnant dans ce concours... pour l'instant ! BTW, il n'y a pas eu de concours du tout 😉 Je pense que les deux bibliothèques font un excellent travail en accomplissant leur tâche de base, qui est de s'occuper d'avoir un état de gestion solide dans votre système d'information. Application JS . J'aurai besoin de plus de temps pour voir comment le quotidien fonctionne avec le MobX diffère de Redux et pour quels cas je pourrais le recommander.

Pour l'instant, je peux dire que le "voyage dans le temps" des DevTools de Redux me manque déjà, mais d'un autre côté, l'établissement d'un état à l'aide de MobX semble si simple et le code écrit est beaucoup plus lisible.

Néanmoins, je suis très curieuse de savoir comment le observable Je m'intéresse aux performances, car chaque fois que je vois de la magie, je me demande quelle part des ressources de mon PC (temps CPU, mémoire ou disque) est utilisée et quel est son degré d'efficacité. Ce sera certainement ma prochaine étape de recherche.

J'espère que je vous donnerai des explications passionnantes sur la manière dont vous pouvez résoudre des problèmes particuliers avec la MobX. A bientôt !

Articles connexes

Fintech

5 exemples de la meilleure utilisation de Ruby

Vous êtes-vous déjà demandé ce que l'on pouvait faire avec Ruby ? Eh bien, le ciel est probablement la limite, mais nous sommes heureux de parler de quelques cas plus ou moins connus...

The Codest
Pawel Muszynski Software Engineer
Développement de logiciels

Ruby on Rails modularisation avec Packwerk Episode I

Les êtres humains ont du mal à avoir une vue d'ensemble d'un problème sans y consacrer beaucoup de temps et d'efforts. C'est particulièrement le cas lorsqu'il s'agit d'applications vastes et complexes....

Nicolas Nisoria
Développement de logiciels

Ruby on Rails modularisation avec Packwerk Episode II

Dans le deuxième épisode de notre modularisation Ruby on Rails avec Packwerk, nous allons examiner de près le concept de l'application en tant que paquet.

Nicolas Nisoria
E-commerce

Dilemmes de la cybersécurité : Fuites de données

La ruée vers les cadeaux de Noël bat son plein. À la recherche de cadeaux pour leurs proches, les gens sont de plus en plus enclins à "prendre d'assaut" les boutiques en ligne

The Codest
Jakub Jakubowicz CTO & Co-Fondateur
Solutions pour les entreprises et les grandes entreprises

Pourquoi est-il possible de construire un MVP avec Ruby on Rails ?

Le MVP est l'une des meilleures méthodes pour construire et mettre en œuvre rapidement un produit sur le marché. Grâce à cette approche, vous pouvez économiser une part importante du...

Nuno Barbosa

Abonnez-vous à notre base de connaissances et restez au courant de l'expertise du secteur des technologies de l'information.

    A propos de nous

    The Codest - Entreprise internationale de développement de logiciels avec des centres technologiques en Pologne.

    Royaume-Uni - Siège

    • Bureau 303B, 182-184 High Street North E6 2JA
      Londres, Angleterre

    Pologne - Les pôles technologiques locaux

    • Parc de bureaux Fabryczna, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsovie, Pologne

      The Codest

    • Accueil
    • A propos de nous
    • Services
    • Études de cas
    • Savoir comment
    • Carrières
    • Dictionnaire

      Services

    • Conseil consultatif
    • Développement de logiciels
    • Développement backend
    • Développement frontal
    • Staff Augmentation
    • Développeurs backend
    • Ingénieurs en informatique dématérialisée
    • Ingénieurs des données
    • Autres
    • Ingénieurs AQ

      Ressources

    • Faits et mythes concernant la coopération avec un partenaire externe de développement de logiciels
    • Des États-Unis à l'Europe : Pourquoi les startups américaines décident-elles de se délocaliser en Europe ?
    • Comparaison des pôles de développement Tech Offshore : Tech Offshore Europe (Pologne), ASEAN (Philippines), Eurasie (Turquie)
    • Quels sont les principaux défis des CTO et des DSI ?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Conditions d'utilisation du site web

    Copyright © 2025 par The Codest. Tous droits réservés.

    fr_FRFrench
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek fr_FRFrench