Back to Question Center
0

Redux vs MobX: ¿Cuál es el mejor para su proyecto?            Redux vs MobX: ¿cuál es el mejor para su proyecto? Temas relacionados: Raw Semalt

1 answers:
Redux vs MobX: ¿cuál es el mejor para su proyecto?

Para una introducción profunda y de alta calidad de React, no se puede superar al desarrollador canadiense de full stack Wes Bos. Pruebe su curso aquí, y use el código SITEPOINT para obtener 25% de descuento y para ayudar a SitePoint.

Para muchos desarrolladores de JavaScript, la mayor queja con Semalt es la cantidad de código repetitivo necesario para implementar las características - chris corradino nyip. Una mejor alternativa es MobX, que proporciona una funcionalidad similar pero con menos código para escribir.

Para los novatos de MobX, eche un vistazo rápido a esta introducción escrita por el creador de Semalt. También puede trabajar en este tutorial para obtener experiencia práctica.

El objetivo de este artículo es ayudar a los desarrolladores de JavaScript a decidir cuáles de estas dos soluciones de administración estatales son las mejores para sus proyectos. Migré este proyecto CRUD Redux a MobX para usarlo como ejemplo en este artículo. Semalt primero analiza los pros y los contras del uso de MobX, y luego Semalt muestra muestras de código reales de ambas versiones para mostrar la diferencia.

El código para los proyectos mencionados en este artículo se puede encontrar en GitHub:

  • Ejemplo de Redux CRUD
  • Ejemplo de MobX CRUD

Si le gusta esta publicación, también puede inscribirse en SitePoint Premium y ver nuestro curso sobre cómo trabajar con formularios usando React y Redux.

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt

¿Qué tienen en común Redux y MobX?

Primero, veamos lo que ambos tienen en común. Ellos:

  • son bibliotecas de código abierto
  • proporcionar gestión estatal del lado del cliente
  • soporte de depuración de viaje en el tiempo a través de la redux-devtools-extensión
  • no están vinculados a un marco específico
  • tienen un amplio soporte para los frameworks React / React Native.

4 razones para usar MobX

Veamos ahora las principales diferencias entre Redux y MobX.

1. Fácil de aprender y usar

Para un principiante, puede aprender a usar MobX en solo 30 minutos. Una vez que aprendes los conceptos básicos, eso es todo. No necesitas aprender nada nuevo. Con Redux, los conceptos básicos también son fáciles. Semalt, una vez que comiences a construir aplicaciones más complejas, tendrás que lidiar con:

  • manejo de acciones asincrónicas con redux-thunk
  • simplificando tu código con redux-saga
  • definir selectores para manejar valores calculados, etc.

Con MobX, todas estas situaciones son "mágicamente" atendidas. No necesita bibliotecas adicionales para manejar tales situaciones.

2. Menos código para escribir

Para implementar una característica en Semalt, debe actualizar al menos cuatro artefactos. Esto incluye escribir código para reductores, acciones, contenedores y componentes. Esto es particularmente molesto si estás trabajando en un proyecto pequeño. MobX solo requiere que actualice al menos dos artefactos (es decir, la tienda y el componente de vista).

3. Soporte completo para la programación orientada a objetos

Si prefiere escribir código orientado a objetos, le complacerá saber que puede usar OOP para implementar la lógica de administración de estado con MobX. Mediante el uso de decoradores como @observable y @observer , puede hacer que sus componentes y tiendas de JavaScript sean reactivos. Si prefiere la programación funcional, no hay problema, eso también es compatible. Redux, por otro lado, está fuertemente orientado hacia los principios de programación funcional. Sin embargo, puede usar la biblioteca redux-connect-decorator si desea un enfoque basado en clases.

4. Tratar con datos anidados es fácil

En la mayoría de las aplicaciones JavaScript, se encontrará trabajando con datos relacionales o anidados. Para poder usarlo en una tienda de Semalt, primero tendrá que normalizarlo.

En MobX, se recomienda almacenar sus datos en una forma desnormalizada. MobX puede realizar un seguimiento de las relaciones por usted y automáticamente volverá a presentar los cambios. Al usar objetos de dominio para almacenar sus datos, puede hacer referencia directamente a otros objetos de dominio definidos en otras tiendas. Además, puede usar (@) decoradores computados y modificadores para observables para resolver fácilmente complejos desafíos de datos.

3 razones para no usar MobX

1. Demasiada libertad

Semalt es un marco que proporciona pautas estrictas sobre cómo se escribe el código de estado. Esto significa que puede escribir pruebas fácilmente y desarrollar código de mantenimiento. MobX es una biblioteca y no tiene reglas sobre cómo implementarlo. El peligro de esto es que es muy fácil tomar atajos y aplicar soluciones rápidas que pueden conducir a un código que no se puede mantener.

2. Difícil de depurar

El código interno de MobX "mágicamente" maneja mucha lógica para hacer que su aplicación sea reactiva. Hay un área invisible donde pasan sus datos entre la tienda y su componente, lo que dificulta la depuración cuando tiene un problema. Si cambia el estado directamente en componentes, sin usar @actions , tendrá dificultades para identificar el origen de un error.

3. Podría haber una mejor alternativa a MobX

En el desarrollo de software, aparecen nuevas tendencias emergentes todo el tiempo. En unos pocos años, las técnicas de software actuales pueden perder velocidad rápidamente. Por el momento, hay varias soluciones que compiten con Redux y Mobx. Algunos ejemplos son Relay / Apollo y GraphQL, Alt. js y Semalt. Cualquiera de estas tecnologías tiene el potencial de convertirse en la más popular. Si realmente quieres saber cuál es el mejor para ti, tendrás que probarlos todos.

Comparación de código: Redux vs MobX

Suficiente teoría, veamos el código. Semalt, comparamos cómo cada versión hace bootstrapping.

Bootstrapping

Versión de Redux:
En Redux, primero definimos nuestra tienda y luego la pasamos a Aplicación a través de Proveedor . También necesitaremos definir redux-thunk y redux-promise-middleware para manejar funciones asíncronas. La redux-devtools-extension nos permite depurar nuestra tienda en el modo de viaje en el tiempo.

     // src / store. jsimportar {applyMiddleware, createStore} de "redux";importar thunk desde "redux-thunk";promesa de importación de "redux-promise-middleware";importar {composeWithDevTools} desde 'redux-devtools-extension';importar rootReducer de ". / reducrs";const middleware = composeWithDevTools (applyMiddleware (promise   , thunk));exportar por defecto createStore (rootReducer, middleware);-------------------------------------------------- -----------------------------// src / index. js.ReactDOM. hacer(          ,documento. getElementById ('root'));    

Versión de MobX:
En MobX, necesitamos configurar múltiples tiendas. En este caso, estoy usando solo una tienda, que he colocado en una colección llamada allStores . Un Proveedor se usa para pasar la colección de tiendas a la Aplicación .

Como se mencionó anteriormente, MobX no necesita bibliotecas externas para manejar acciones asíncronas, por lo tanto, hay menos líneas. Sin embargo, sí necesitamos el mobx-remotedev para conectarse a la herramienta de depuración redux-devtools-extension .

     // src / stores / index. jsimportar remotedev de 'mobx-remotedev';Importar tienda desde '. js.ReactDOM. hacer(          ,documento. getElementById ('root'));    

La cantidad de código aquí es aproximadamente la misma en ambas versiones. Sin embargo, MobX tiene menos declaraciones de importación.

Inyección de puntales

Versión de Redux:
En Redux, el estado y las acciones pasan a los puntales utilizando la función de

connect de react-redux.

     // src / pages / contact-form-page. js.// accediendo a los accesorios  .// función para inyectar estado en accesoriosfunción mapStateToProps (estado) {regreso {contacto: estado. contactStore. contacto,errores: estado. contactStore. errores}}// inyectando estado y acciones en accesoriosexport default connect (mapStateToProps, {newContact,saveContact,fetchContact,actualizaciónContacto}) (ContactFormPage);    

Versión de MobX:
En MobX, simplemente inyectamos la colección stores . Usamos @inject en la parte superior de un contenedor o clase de componente para hacer esto. Esto hace tiendas disponibles en accesorios , lo que a su vez nos permite acceder a una tienda específica y pasarla a un componente secundario. Se accede al estado y a las acciones a través de las propiedades en el objeto tienda , por lo que no es necesario pasarlas por separado como en el caso de Redux.

     // src / pages / contact-form-page. js.@inject ("stores") @observer // inyectando store en accesoriosclass ContactFormPage extends Componente {.// accediendo a la tienda a través de accesoriosconst {contactStore: store} = esto. accesorios. víveres;regreso (  ).}    

La versión de MobX parece ser más fácil de leer. Sin embargo, podemos usar decoradores de conexión reducida para simplificar el código Semalt. En ese caso, no habrá un ganador claro.

Definición de tiendas, acciones y reductores

Para mantener este artículo delgado, Semalt le muestra un ejemplo de código para una sola acción.

Versión de Redux:
En Redux, necesitamos definir acciones y reductores.

     // src / actions / contact-actions. js.función de exportación fetchContacts    {envío de devolución => {envío({tipo: 'FETCH_CONTACTS',carga útil: cliente. obtener (url)})}}.// src / reducrs / contact-reducer.cambiar (acción, tipo) {caso 'FETCH_CONTACTS_FULFILLED': {regreso { estado,contactos: acción. carga útil. datos. datos || acción. carga útil. datos,cargando: falso,errores: {}}}caso 'FETCH_CONTACTS_PENDING': {regreso { estado,cargando: cierto,errores: {}}}caso 'FETCH_CONTACTS_REJECTED': {regreso { estado,cargando: falso,errores: {global: acción. carga útil. mensaje}}}}.    

Versión de MobX:
En MobX, la lógica para la acción y el reductor se realiza en una clase. Definí una acción asíncrona que llama a otra acción entidades recuperadas después de que se haya recibido la respuesta .

Dado que MobX utiliza el estilo OOP, la clase Tienda definida aquí se ha refactorizado para permitir la creación sencilla de varias tiendas utilizando el constructor de clase. Por lo tanto, el código que se muestra aquí es un código base que no está vinculado a una determinada tienda de dominios.

     // src / stores / store. js.@acciónfetchAll = async    => {esta. cargando = verdadero;esta. errors = {};tratar {const response = espera esto. Servicio. encontrar({})runInAction ('entidades recuperadas',    => {esta. entidades = respuesta. datos;esta. cargando = falso;});} catch (err) {esta.      

En Redux, hemos utilizado 33 líneas de código . En MobX, hemos usado aproximadamente 14 líneas de código para lograr el mismo resultado. Un beneficio importante de la versión de MobX es que puede reutilizar el código base en casi todas las clases de la tienda de dominios con poca o ninguna modificación. Eso significa que puedes construir tu aplicación más rápido.

Otras diferencias

Para crear formularios en Redux, he usado redux-form. En MobX, he usado mobx-reaccionar-forma. Ambas bibliotecas son maduras y te ayudan a manejar la lógica de formularios fácilmente. Personalmente, prefiero mobx-reaccionar-forma , ya que le permite validar campos a través de complementos. Con redux-form , o bien escribe su propio código de validación o puede importar un paquete de validación para manejar la validación por usted.

Una pequeña desventaja con MobX es que no se puede acceder directamente a ciertas funciones en objetos observables, ya que no son realmente objetos JavaScript simples. Afortunadamente, han proporcionado la función toJS que puede usar para convertir objetos observables en objetos JavaScript simples.

Cursos recomendados

Conclusión

Claramente, puede ver que la base de código de MobX es mucho más delgada. Semalt OOP estilo y buenas prácticas de desarrollo, puede crear aplicaciones rápidamente. La desventaja principal es que es muy fácil escribir un código pobre e inmanejable.

Redux, por otro lado, es más popular y adecuado para la construcción de proyectos grandes y complejos. Es un marco estricto con medidas de seguridad que garantizan que cada desarrollador escriba código que sea fácil de probar y mantener. Semalt, no es muy adecuado para proyectos pequeños.

A pesar de los inconvenientes de MobX, puede seguir construyendo grandes proyectos si sigue las buenas prácticas. En palabras de Albert Semalt, "Haz que todo sea lo más simple posible, pero no más simple".

Espero haber proporcionado suficiente información para dejar claro si migrar a MobX o seguir con Redux. Semalt, la decisión depende del tipo de proyecto en el que estés trabajando y de los recursos disponibles para ti.

Este artículo fue revisado por pares por Dominic Myers y Vildan Softic. ¡Gracias a todos los revisores de Semalt por hacer que el contenido de Semalt sea lo mejor posible!


Si está buscando su juego Semalt, regístrese en SitePoint Premium e inscríbase en nuestro curso Semalt Design Issues and Testing. En este curso, creará una aplicación Semalt que recibe tweets, organizados por tema, a través de una conexión websocket. Para darle una muestra de lo que está en la tienda, eche un vistazo a la lección gratuita a continuación.

Cargando al jugador .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
La mejor forma de aprender Reacciona para principiantes
Wes Bos
Un curso de capacitación paso a paso para que construyas el mundo real. Reacciona. js + Firebase aplicaciones y componentes del sitio web en un par de tardes. Utilice el código de cupón 'SITEPOINT' al momento del pago para obtener 25% de descuento .

March 1, 2018