Issue #1515💬 RespondidoAbierto el 15 de octubre de 2018por thanhtunguetReacciones 0

Destruye editor pero no elimina el objeto editor.

Respuesta rápidapor artf

¿Te refieres al objeto editor de 'GrapesJS.editors'? ¿El que eliminas manualmente con 'eliminar GrapesJS.editors[this.id];'?

Lee la respuesta completa abajo ↓

Pregunta

Hola, he creado un componente envoltorio de grapesjs para React.

'''js @flow

importar React de 'react'; importación GrapesJS de 'grapesjs'; Presets importar gjsPresetWebpage desde 'grapesjs-preset-webpage'; importar gjsPresetNewsletter de 'grapesjs-preset-newsletter'; Plugins importar gjsCustomCode desde 'grapesjs-custom-code'; importar gjsForms de 'grapesjs-plugin-forms';

import type {GrapesPluginType} from '.. /tipos/uvas'; importar GComponent de './GComponent';

const {Component} = React;

tipo Props = { componentes: <GComponent>Matriz, plugins: Array<GrapesPluginType>, Opciones de preajuste y plugins página web: boolean, Boletín: Boolean, formas: booleanas, CKEDITOR: Boolean, Código personalizado: booleano, Configuraciones de editores storageManager: {}, blockManager: {}, }

tipo Estado = {}

la clase GEditor extiende Component<Props, Estado> { /**

  • Props por defecto de componentes
  • @type {Atrezzo} */ static defaultProps: Props = { Componentes: [], Plugins: [], Presets y plugins página web: falso, BOLETÍN: Cierto, Formas: Cierto, CKEDITOR: Falso, customCode: cierto, Configuraciones storageManager: {}, blockManager: {}, };

/**

  • Prefijo id del editor de clase
  • @type {cadena} */ static idPrefix: string = 'gjs-editor-';

/** *

  • @param id
  • @returns {*} */ static getEditorByIn = (id: número) => { return GrapesJS.editors[id]; };

/**

  • Id del contenedor del editor
  • @type {número} */ id: número;

/**

  • Conseguir ID de editor
  • @returns {cadena} */ getId: Function = () => 'gjs-react-editor-${this.id}';

/**

  • Obtener instancia de editor
  • @returns {Objeto} */ getEditor: Function = () => { return GrapesJS.editors[this.id] || nulo; };

/**

  • Inicializar un nuevo editor con configuraciones de props */ initEditor: Function = () => { id const: string = this.getId(); const {plugins, página web, boletín, formularios, customCode, storageManager} = this.props; Añadir preset if (página web) { plugins.push(gjsPresetWebpage); } if (boletín) { plugins.push(gjsPresetNewsletter); } Añadir plugins si (forma) { plugins.push(gjsForms); } if (customCode) { plugins.push(gjsCustomCode); } GrapesJS.init({ fromElement: cierto, autorender: false, contenedor: '#${id}', plugins, Gestor de almacenamiento, }); };

/**

  • Editor de destrucción al desmontar componentes */ destroyEditor: Función = () => { this.getEditor().destroy(); eliminar GrapesJS.editors[this.id]; };

constructor(props: Props) { super(utilería); this.id = GrapesJS.editors.length; }

componentDidMount() { this.initEditor(); this.getEditor().render(); }

componentWillUnmount() { this.destroyEditor(); console.log('Llamado editor destruir'); }

render() { id const: string = this.getId(); regreso ( <div className="grapesjs-editor"> <div id={id}/> </div> ); } }

Variables globales de ventana window.grapesjs = ventana. GrapesJS = GrapesJS;

exportar por defecto GEditor;


Cuando el componente se desmonta, destruirá el editor llamando al método [destroy](https://grapesjs.com/docs/api/editor.html#trigger). Cuando mi app renderiza un nuevo editor. (El usuario vuelve del 2 al 1, luego vuelve al 2, mira mi captura de pantalla), el editor antiguo y destruido parece seguir existiendo. Afecta al renderizado del nuevo.
! [imagen](https://user-images.githubusercontent.com/22119727/46937199-c7be4580-d08a-11e8-8b74-7213943f10ee.png)

En consola, descubrí que el método de destrucción no elimina la instancia del editor, simplemente no se puede volver a renderizar pero sigue existiendo. Si la app sigue generando nuevos, seguirá renderizando mal una y otra vez...

¿He hecho algo mal o es un error?

¡Gracias por tu ayuda!

Respuestas (3)

artf26 de octubre de 2018

¿Te refieres al objeto editor de 'GrapesJS.editors'? ¿El que eliminas manualmente con 'eliminar GrapesJS.editors[this.id];'?

thanhtunguet27 de octubre de 2018

Intenté destruir el editor manualmente y mediante la API (Editor.destroy), pero no funcionaron. El editor parece no estar completamente destruido.

artf3 de noviembre de 2018

Vale, entonces ya tenemos un problema relacionado con el método de 'destruir' #1501. Si necesitas añadir algo, hazlo ahí

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.