Issue #4497💬 RespondidoAbierto el 3 de agosto de 2022por benryanwilliamsReacciones 3

Actualizar a GrapesJS v19.5 desde la v18.4 hace que Chrome deje de responder

Respuesta rápidapor tyuterry1

Una reproducción en Fiddle (con vue) No puedo reproducirme sin vue jugueteo Pasos para reproducir el problema:Añadir un componente de textoSelecciona el componente de texto y luego haz clic en el botón 'Convertir a Condicional' en la parte inferiorPasa el cursor sobre el componente de texto condicional y entonces se c...

Lee la respuesta completa abajo ↓

Pregunta

Versión GrapesJS

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

¿Qué navegador usas?

Chrome 104.0.5112.79

Enlace de demo reproducible

https://jsfiddle.net/gvrnw2c3/4/

Describe el bicho

¿Cómo reproducir el bicho?

Actualmente no puedo reproducir el error usando jsfiddle, lo que me hace pensar que es un problema de Chrome, pero seguiré intentando reproducirlo.

_Within mi proyecto tal y como se muestra en el vídeo:

  1. Haz clic en un componente de 'texto condicional' (tipo de componente personalizado que he añadido)
  2. Haz clic en el botón 'Abrir condicionales' y, dentro del diálogo que aparece en pantalla, haz clic en 'Aplicar'
  3. Pasar el cursor sobre el componente 'texto condicional'

In JSFiddle (actualmente no se bloquea, pero seguiré probando):

  1. Haz clic en el componente de texto 'Hola Mundo'
  2. Haz clic en el botón 'Convertir a condicional' al final de la página
  3. Haz clic en el componente 'texto condicional' recién creado (con el texto "Abrir condicionales para elegir texto")
  4. Haz clic en el botón 'Cambiar condicional' al final de la página
  5. Mover el cursor sobre el componente 'texto condicional' (actualmente no se bloquea, pero seguiré probando)

¿Cuál es el comportamiento esperado?

La app debería seguir funcionando con normalidad (funciona bien en GrapesJS v18.4)

¿Cuál es el comportamiento actual?

Toda la pantalla se bloquea en cuanto el cursor pasa sobre el componente de 'texto condicional' y, tras unos 5 segundos, aparece lo siguiente:

<img width="455" alt="Captura de pantalla 2022-08-03 at 18 15 14" src="https://user-images.githubusercontent.com/67364267/182594957-2cc8e70b-42c4-452e-b29e-b02d77e9821c.png">

Aquí tienes la captura de pantalla del número:

https://user-images.githubusercontent.com/67364267/182598233-29209c1b-b99e-438c-9d9a-3e46dd750a31.mov

Tras un poco de depuración (sin éxito), también encontré lo siguiente:

Las frases comentadas en los siguientes métodos (que se activan al pulsar el botón 'Aplicar' como se ve en el vídeo) parecen ser las responsables del fallo. Cabe mencionar que todas estas líneas, cuando no se comentan, afectan a la apariencia del componente en el lienzo (es decir, cambian el texto visible), así que quizá tenga que ver con la vista del componente que se está renderizando. Las otras líneas que aparecen a continuación no provocan el accidente:

applyIfCondition(conditionCode, conditionObjects) {
      const selectedComponent = this.editor.getSelected()
      if (selectedComponent.isInstanceOf("texto-condicional")) {
        console.log(condiciónCode, ... condicionesObjetos)
        selectedComponent.addAttributes({ liquidtag: "if" })
        selectedComponent.components(conditionCode)
        selectedComponent.set ("conditionObjects", conditionObjects)
        selectedComponent.set("isNew", false)
        selectedComponent.getView().render()
      }
    },
    selectIfCondition(displayText, selectedIndex) {
      const selectedComponent = this.editor.getSelected()
      if (selectedComponent.isInstanceOf("texto-condicional")) {
        console.log(displayText, selectedIndex)
        selectedComponent.set ("displayedText", displayText)
        selectedComponent.set ("selectedConditionIndex", selectedIndex)
        selectedComponent.getView().render()
      }
    },

Así que son las siguientes líneas las que parecen causar el fallo, por lo que he podido ver hasta ahora: si elimino los comentarios de alguna de estas líneas de los métodos, el texto dentro del componente cambia al hacer clic en aplicar y el cierre ocurre al pasar el cursor sobre el componente:

'selectedComponent.components(conditionCode)' 'selectedComponent.getView().render()' 'selectedComponent.set ("displayedText", displayText)' 'selectedComponent.getView().render()'

N.B. El componente personalizado de 'texto condicional' en mi proyecto es el mismo que en el jsfiddle: he intentado reproducir el error simplificando el resto del código (no quería copiar toda la lógica de mi proyecto), pero el código que importa sigue siendo executed.

Por favor, házmelo saber si necesita más información.

Código de conducta

  • Acepto seguir el Código de Conducta de este proyecto

Respuestas (4)

tyuterry11 de agosto de 2022

Una reproducción en Fiddle (con vue) No puedo reproducirme sin vue jugueteo

Pasos para reproducir el problema:

  1. Añadir un componente de texto
  2. Selecciona el componente de texto y luego haz clic en el botón 'Convertir a Condicional' en la parte inferior
  3. Pasa el cursor sobre el componente de texto condicional y entonces se congela.

Parece que algo se activa en Hover para siempre ! imagen ! imagen

artf12 de agosto de 2022

Gracias chicos, de hecho pude reproducirlo envolviendo el ejemplo dentro de Vue, pero no estoy seguro de por qué está atascado en el bucle aquí. A primera vista, parece estar relacionado con los observadores Proxy de Vue. Comparando la demo con la versión anterior de Grapesjs, parece que no todas las piezas se transforman en Proxies y eso evita que se quede atascado. Como solución rápida sería poner el 'editor' fuera de Vue para evitar transformar todos los objetos en proxies. '''js editor de la LET; Vue.createApp({ montado() { editor = grapesjs.init({ ... }); // ... }, // .. }).montar('#app')

benryanwilliams15 de agosto de 2022

Gracias @artf, todo funciona perfectamente ahora al declarar el editor fuera de la instancia de Vue.

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @benryanwilliams.

Buena pregunta sobre Actualizar a GrapesJS v19.5 desde la v18.4 hace que Chrome deje de responder. El enfoque recomendado con Canvas 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.