Destruye editor pero no elimina el objeto editor.
¿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)
¿Te refieres al objeto editor de 'GrapesJS.editors'? ¿El que eliminas manualmente con 'eliminar GrapesJS.editors[this.id];'?
Intenté destruir el editor manualmente y mediante la API (Editor.destroy), pero no funcionaron. El editor parece no estar completamente destruido.
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.
Issue #1298
[Bug] El editor interno no elimina un componente al seleccionarse desde el Administrador de Capas
Estoy usando la última versión de Grapejs y actualmente puedo recrear este número en la demo. El problema que tengo es cuando selecciono al...
Issue #1875
[PREGUNTA] Cambios de ID al importar HTML o pasar HTML en components prop en config.
Hola, He creado un componente y un bloque que puedo arrastrar y soltar en el lienzo. Mi problema es que algunos estilos dependen del ID. Sé...
Issue #843
[PREGUNTA] - CssComposer - elimina clases no utilizadas
Hola @artf, Importo un html, usando import de grapesjs-preset-newsletter, con algunas clases CSS dentro de la <style>etiqueta ''. Después d...
Issue #1913
[BUG] Especificar el tamaño del fondo en las propiedades del fondo rompe grapesjs
Usando las últimas versiones de 'grapesjs' (0.14.55) y 'grapesjs-preset-webpage' (0.1.10), he configurado mi editor de la siguiente manera:...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
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 →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.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.