Cómo recrear el estado de un componente de React

Escenario

Tenemos una aplicación web usando React 15.6.2. Todo va bien hasta que un nuevo módulo para una nueva funcionalidad requiere una versión >= 16.3. El problema es que al actualizar la biblioteca de programación otro módulo dejó de funcionar.

Problema

El modulo que dejó de funcionar consistía en una serie de combos que se generan dinámicamente según el valor escogido en el combo precedente. Por ejemplo, en el primero tienes una lista de continentes. Si eliges «Europa» en el siguiente combo se cargarán los países de dicho continente. Cada combo es un componente de React que se va a añadiendo a un variable incluida en el DOM devuelto por el método render de la clase. Cuando se dispara el evento onChange de uno de los componentes, se descargan los datos pertinentes para generar otro componente a añadir a la variable con el array de componentes y, hasta la susodicha actualización, aparecía en pantalla el nuevo combo. Ahora no aparecía el siguiente combo, tampoco saltaba ningún error y pude comprobar que el array de combos se estaba llenando correctamente. Daba la sensación de que no se estaba recreando el estado que disparaba la renderización del componente.

Solución

Tras intentar varias tentativas complejas e infructuosas, algunas de las cuales implicaban forzar el cambio de estado del padre desde el componente hijo, o el uso de getDerivedStateFromProps() para detectar los cambios en las propiedades del componente y forzar la actualización del DOM, di con un artículo de un blog de reactjs.org que abrió me los ojos. El título del artículo es Probablemente no necesites estado derivado y, efectivamente, bastaba añadir una propiedad key al elemento padre devuelto por el método render para que el componente volviera a recrear el DOM.

Publicaciones Similares

  • |

    Gestión de imágenes corruptas

    Escenario Nos encontramos ante una biblioteca de decenas de miles de archivos fotográficos, de los cuales un porcentaje considerable está corrupto. Objetivo Depurar las imágenes corruptas a fin de organizar como es debido nuestra biblioteca. Solución Nota: sólo aplicable a sistemas linux Vamos a necesitar la aplicación ImageMagick: $sudo apt-get install imagemagick y rsync, que debería venir instalado…

  • Valor por defecto en un combo de una plantilla de Thymeleaf

    Escenario En Thymleaf podemos usar el atributo th:field para enlazar la vista con el modelo:

    En caso de que hubiéramos cargado estos datos del servidor, nuestro select tendría esta pinta:

    Problema ¿Qué pasa si queremos seleccionar una divisa por defecto? En el caso de que fuera el euro tendríamos que hacer algo así,…

  • |

    Traducción de variables en javascript

    Escenario Estoy trabajando en una aplicación multi-lenguaje desarrollada con la plataforma spring boot. Para quien no conozca esta plataforma de desarrollo, spring boot te permite gestionar varios lenguajes gracias a un sistema que utiliza ficheros de tipo propiedades para almacenar las traducciones. Los nombres de estos ficheros han de respetar la siguiente convención, messages_{código ISO…

  • Actualización de Mautic 4

    Este artículo va dedicado a aquellos administradores web entre cuyas labores se encuentre el mantenimiento de una instalación Mautic. Por eso no voy a explicar qué es Mautic: si no lo conoces, este artículo carece de interés. Vamos a partir de la base que el usuario UNIX, propietario de la instalación, es mautic y que…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *