Skip to content

Renderer

ts
import type { PropContext } from "@dpg.gg/core/renderer";

import { Renderer, Traverse, PropManager, createRenderer, renderer } from "@dpg.gg/core/renderer";

Overview

Класс Renderer предназначен для работы со схемой. Он преобразовывает схему в готовый html код, который в последствии обрабатывается браузером и отображается как обычное SPA приложение.

Ядром процессов рендера является легковесная и прогрессивная библиотека preact.

Renderer основан на EventEmitter, поэтому можно использовать его для каких-либо взаимодействий с событиями.

Пример использования:

ts
export { Renderer } from "@dpg.gg/core/renderer";

const renderer = new Renderer();
const schema = {
	/* ... */
};

renderer.render(schema, document.querySelector("#app"));

Props

plugins

Изолированный для Renderer экземпляр Plugin Manager для расширения функционала

traverse

Изолированный для Renderer экземпляр Traverse

events

Ссылка для traverse.events

Можно использовать для написания middleware функций, например:

js
import { emitter } from "@dpg.gg/core/event";

renderer.events.use(async (ctx, next) => {
	const { value } = ctx;
	if (typeof value === "string") ctx.value = (...args: any) => emitter.emit(value, ...args);
	return next();
});

props

Ссылка для traverse.props, принцип использования схож с events

Methods

render(schema, root)

  • Arg schema - SchemaItem | SchemaItem[]
  • Arg root - HTMLElement

Основной метод который переводит schema в Virtual DOM и в последствии "отрисовывает" в реальный DOM внутрь переданного root.

ts
renderer.render(["Hello", "World"], document.body);

once, on, off, emit

Это методы прослушивателя события, подробнее можно посмотреть на соответствующей странице EventEmitter

ts
renderer.once("error", console.error);
renderer.on("log", console.log);
renderer.emit("log", "Hello world!");
renderer.emit("error", "Crash");

Events

render

Базовое событие render которое вызывается после успешного выполнения Traverse и отрисовки:

ts
renderer.on("render", () => console.log("App is rendered"));