Editor
La instancia del editor principal. Úsalo para eventos del ciclo de vida, gestores y ejecución de comandos.
Esta guía se centra en la implementación práctica: tipificación estricta para el ciclo de vida del editor, contratos de plugins y definiciones personalizadas de componentes que tu equipo pueda mantener a largo plazo.
Fuente tipográfica
Versión 1.x integrada
Modo recomendado
Estricto: Cierto
Caso de uso
Editores de producción
La instancia del editor principal. Úsalo para eventos del ciclo de vida, gestores y ejecución de comandos.
Representa un nodo en el árbol de lienzo. Útil para manejadores de eventos tipados y rasgos personalizados.
Un bloque de construcción arrastrable. Las definiciones de bloques seguras para tipos reducen errores en el contenido en tiempo de ejecución.
Se utiliza al registrar nuevos tipos de componentes a través de ComponentManager.addType().
Tipifica fuertemente los valores predeterminados y rasgos para que los miembros del equipo reutilicen el mismo contrato de componente.
Cubre la configuración y operaciones de almacenamiento para flujos de trabajo de persistencia locales o remotas.
Escalón 01
Activa el modo estricto y noImplicitAny antes de escribir la lógica del editor para detectar errores de plugins y componentes a tiempo.
Escalón 02
Usar Editor | null para el flujo de inicialización y añadir guards antes de llamar a las APIs del gestor desde callbacks asincrónicos.
Escalón 03
Define interfaces de opciones con los valores predeterminados para que las APIs de plugins se mantengan estables entre proyectos y versiones.
Escalón 04
Estandariza los rasgos y valores predeterminados de los componentes con tipos compartidos de TypeScript para mantener a los equipos alineados.
Mantén la inicialización del editor y el flujo de eventos tipados desde el primer día. Esto detecta las llamadas de administrador inválidas y los errores de carga útil de eventos a tiempo.
import grapesjs from 'grapesjs';
import type { Editor, Component, Block } from 'grapesjs';
// Typed editor instance
let editor: Editor | null = null;
editor = grapesjs.init({
container: '#gjs',
storageManager: false,
});
// Typed event handlers
editor.on('component:add', (component: Component) => {
console.log('Added component:', component.get('type'));
});
// Typed block access
const blockManager = editor.BlockManager;
const blocks: Block[] = blockManager.getAll().models;Define interfaces de opciones de plugin y valores predeterminados para que tu extensión sea segura para los equipos y predecible en todas las versiones.
import type { Editor } from 'grapesjs';
interface MyPluginOptions {
apiKey?: string;
debug?: boolean;
}
const myPlugin = (editor: Editor, opts: MyPluginOptions = {}) => {
const { apiKey = '', debug = false } = opts;
editor.BlockManager.add('custom-block', {
label: 'Custom Block',
category: 'Custom',
content: '<div class="custom-block">Custom content</div>',
});
if (debug) {
console.log('Plugin initialized with API key:', apiKey);
}
};
export default myPlugin;Las definiciones de componentes tipados reducen errores de rasgos en tiempo de ejecución y ayudan a los equipos de producto a crear modelos de contenido reutilizables.
import type { ComponentDefinition, ComponentProperties } from 'grapesjs';
// Typed component definition
const heroComponent: ComponentDefinition = {
model: {
defaults: {
tagName: 'section',
draggable: true,
droppable: false,
attributes: { class: 'hero-section' },
traits: [
{ type: 'text', name: 'headline', label: 'Headline' },
{ type: 'text', name: 'subheadline', label: 'Subheadline' },
],
} as ComponentProperties,
},
};
editor.ComponentManager.addType('hero', heroComponent);Todos los plugins premium incluyen definiciones TypeScript para una integración más segura y rápida.
Explorar plugins