Issue #6685💬 RespondidoAbierto el 12 de enero de 2026por sheryReacciones 0

Los estilos de componentes personalizados no se aplican tras la eliminación y la re-suma

Respuesta rápidapor mdmontesinos

Me estoy enfrentando a un problema similar, donde el componente reañadido tiene la propiedad de estilos correctos: <img width="1112" height="17" alt="Image" src="https://github.com/user-attachments/assets/474011c4-b1be-48df-9aa8-14c3dcdfc68d" /> Pero si uso el botón "Ver código", el CSS no se inyectó, en mi caso ni si...

Lee la respuesta completa abajo ↓

Pregunta

Versión GrapesJS

  • Confirmo que uso la última versión de GrapesJS

¿Qué navegador usas?

Chrome v143.0.7499.193

Enlace de demo reproducible

https://codesandbox.io/p/sandbox/2l3887

Describe el bicho

¿Cómo reproducir el bicho?

  1. Abre la página y carga el editor GrapesJS
  2. Selecciona el componente Fila y elimínalo
  3. Haz clic en el componente Fila en la barra lateral izquierda para añadir una Fila al lienzo

¿Cuál es el comportamiento esperado? El componente Row recién añadido debería mostrar los estilos correctos (fondo blanco, borde, radio de borde, relleno, etc.)

¿Cuál es el comportamiento actual? Tras volver a añadir el componente Fila, la clase CSS .gjs-row definida en la propiedad styles no se aplica al elemento DOM, lo que provoca la ausencia de estilos y el componente se muestra como un contenedor de texto plano sin estilo

Si es necesario ejecutar algo de código para reproducir el error, pégalo aquí abajo: '''js Definición de componentes de fila editor. Components.addType('row', { modelo: { Predeterminados: { nombre: 'Row', etiquetaNombre: 'div', Arrastrable: Cierto, Droppable: Cierto, atributos: { clase: 'gjs-row' }, Estilos: ' .gjs-row { pantalla: flex; Envoltura flexible: envolvente; Diferencia: 16px; acolchado: 16px; Color de fondo: #fff; borde: 1px sólido #e5e7eb; Radio de frontera: 8px; margen inferior: 16px; } `, Componentes: [ { tipo: 'columna' }, { tipo: 'columna' }, { tipo: 'column' } ] } } });


**Síntomas:**

1. El primer componente de Fila añadido muestra correctamente los estilos
2. Tras la eliminación y la reincorporación, se pierden los estilos de componentes de fila
3. El atributo clase existe en el DOM pero las reglas CSS no se inyectan

<img width="1886" height="875" alt="Image" src="https://github.com/user-attachments/assets/2a09f090-fbd8-41e1-a29d-7e0b90072e7b" />

<img width="1245" height="377" alt="Image" src="https://github.com/user-attachments/assets/98db4307-ef2a-4547-ae90-409f6640e060" />

<img width="1873" height="762" alt="Image" src="https://github.com/user-attachments/assets/dee28083-6cda-4ad6-b3f1-4cac2aa43533" />

### Código de conducta

- [x] Acepto seguir el Código de Conducta de este proyecto

Respuestas (4)

mdmontesinos17 de febrero de 2026

Me estoy enfrentando a un problema similar, donde el componente reañadido tiene la propiedad de estilos correctos:

<img width="1112" height="17" alt="Image" src="https://github.com/user-attachments/assets/474011c4-b1be-48df-9aa8-14c3dcdfc68d" />

Pero si uso el botón "Ver código", el CSS no se inyectó, en mi caso ni siquiera están en el DOM. El componente en sí funciona, porque cuando se añadió por primera vez, los estilos estaban realmente inyectados y funcionaban bien. Solo después de quitarlo y volver a añadirlo falla.

También he probado usando la función "component.replaceWith(newComponent)" en lugar de "component.remove()" y "editor.addComponents(newComponent)".

Ejemplo de código: '''s Definición de componentes domComponents.addType('my-type', { modelo: { Predeterminados: { etiquetaNombre: 'div', nombre: 'My Type', atributos: { 'data-gjs-type': 'my-type' }, } } });

Añadir componente (aquí los estilos funcionan) editorInstance.Components.addComponent({ Tipo: 'Mi-Tipo', atributos: { id: 'mi-id' }, componentes: //varios componentes de texto e imagen, Styles: '#my-id #ir2o {\n relleno: 5px;\n izquierda: 94px;\n Arriba: 120px;\n posición: absoluta;\n}\n\n ....' }, { at: 0 });

Recuperación del componente en otra operación sea myComponent = editorInstance.Components.getComponents().find((component: Component) => component.getType() === 'mi-tipo');

Reemplazarlo (o quitarlo y volver a añadir) por uno actualizado myComponent.replaceWith({ Tipo: 'Mi-Tipo', atributos: { id: 'mi-id' }, componentes: //Actualizados varios componentes de texto e imagen, estilos: '#my-id #ir2o {\n relleno: 5px;\n izquierda: 94px;\n arriba: 140px;\n posición: absoluta;\n}\n\n ....' //Estilos actualizados });

Los componentes se añaden con éxito, pero los estilos actualizados no se inyectan.

artf18 de febrero de 2026

@mdmontesinos tu uso no es correcto, los 'estilos' deben definirse en la definición de componentes, y no se espera que cambien. Además, es incorrecto usar IDs para la definición de componentes si se espera que el componente se reutilice, el ID se recreará, dependerá de clases, especialmente para estilos.

Pero el informe de @shery parece legítimo; Puede que haya un problema con el almacenamiento en caché de estilos.

mdmontesinos18 de febrero de 2026

@artf estoy usando un ID porque siempre habrá una instancia única de ese componente en mi proyecto. Mi caso de uso es que un componente está diseñado externamente para usarse como "fondo de fondo" y luego importado a proyectos que lo utilizan. Por lo tanto, cuando se actualiza el componente externo, también necesito actualizarlo en mi proyecto, por eso intento recrearlo, y puede que sus componentes o estilos hayan sido modificados. ¿Hay alguna forma de forzar que los estilos se actualicen a los estilos?

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @shery.

Buena pregunta sobre Los estilos de componentes personalizados no se aplican tras eliminarlos y volver a añadir. El enfoque recomendado con StyleManager es usar la API orientada a eventos.

Empieza aquí:

  1. Consulta la documentación de GrapesJS de tu módulo específico
  2. Busca el método del oyente de eventos 'on()'
  3. La mayoría de las operaciones se pueden realizar escuchando eventos del editor y de los componentes

Patrones comunes: '''javascript Prestad atención a los cambios editor.on('Change', () => console.log('Something Changed'));

Ciclo de vida de los componentes editor.on('component:mount', (c) => console.log('component ready', c)); editor.on('component:update', (c) => console.log('component updated', c));


**Si sigues atascado:**
- Compartir una reproducción mínima de CodeSandbox
- Incluye lo que ya has probado
- Menciona tu versión GrapesJS
- ¡La comunidad está aquí para ayudar!

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.

Explora plugins gratuitos →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.