Issue #1964💬 RespondidoAbierto el 13 de abril de 2019por richbai90Reacciones 0

Requisitos mínimos para crear un componente personalizado

Respuesta rápidapor artf

En primer lugar, empieza a usar la definición mejorada de los componentes. En tu ejemplo, el 'content: (<div>Foo</div>)' se compilará en un objeto, y cuando añades un objeto o array de objetos al editor, significa que ya no necesitas el proceso de análisis sintáctico, así que nunca pulsas 'isComponent', por lo que ese...

Lee la respuesta completa abajo ↓

Pregunta

He estado leyendo la documentación todo el día sobre cómo crear un componente personalizado. También he mirado grapesjs-mjml como ejemplo. Estoy intentando crear un tipo base para los componentes de React que pueda extenderse según sea necesario, pero por ahora solo quiero ver qué métodos de ciclo de vida se llaman y cuándo. Estoy intentando averiguar la diferencia entre 'render' y 'toHTML' específicamente. He creado solo un componente básico con algo de registro, y parece que no funciona. Aquí está mi código

'''js importar React de 'react'; exportar editor por defecto => { VAR Comps = Editor. DomComponents; var defaultType = comps.getType('default'); var defaultModel = defaultType.model; var defaultView = defaultType.view;

La 'entrada' será el ID del tipo de componente comps.addType('react-base', { Defina el modelo model: defaultModel.extend({ toHTML() { Tendremos que hacer algunos procesamientos personalizados aquí console.log('toHTML') }, }, El segundo argumento de .extend son los métodos estáticos y pondremos dentro de nuestro método isComponent(). Mientras pones un nuevo tipo de Componente encima de la pila, No declarar isComponent() probablemente podría romper cosas, especialmente si extiendes el predeterminado. { isComponent(el) { console.log(el); }, }),

Definir la vista view: defaultView.extend({ render() { Extiende el método de renderizado original También tendremos que añadir algo de procesamiento personalizado aquí console.log('render');

}, }), });

Un bloque para el componente personalizado editor. BlockManager.add('react-base', { etiqueta: 'Prueba', contenido: (<div>Foo</div>), }); };


Estoy pasando un componente React como contenido, que espero no renderizar por ahora, pero tampoco recibo ni un solo registro en mi consola. Eso sí, veo el bloque personalizado, así que sé que ese editor está definido y es exactamente lo que espero que sea.

Estoy seguro de que hay algo muy sencillo que se me escapa, pero no sé qué es. 

Respuestas (2)

artf13 de abril de 2019

En primer lugar, empieza a usar la definición mejorada de los componentes. En tu ejemplo, el 'content: (<div>Foo</div>)' se compilará en un objeto, y cuando añades un objeto o array de objetos al editor, significa que ya no necesitas el proceso de análisis sintáctico, así que nunca pulsas 'isComponent', por lo que ese tipo no se inicializa. Por cierto, no está muy claro qué te gustaría conseguir con tu editor

lock[bot]15 de abril de 2020

Este hilo se ha bloqueado automáticamente porque no ha habido actividad reciente desde que se cerró. Por favor, abre un nuevo problema para bugs relacionados.

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.