Skip to content

Schema

Schema представляет собой коллекцию элементов, которые будут "отрисованы" по мере работы Renderer

SchemaItem

  • SchemaElement | string

Объект схемы может быть строкой или объектом с определенным набором правил

json
[
	"Hello",
	{ "element": "a", "props": { "href": "/" }, "children": ["Earth"] },
	{ "element": "a", "props": { "href": "/dubai" }, "children": ["Dubai"] },
	{ "element": "a", "props": { "href": "/masterplan" }, "children": ["Masterplan"] },
	{ "element": "a", "props": { "href": "/fp/1" }, "children": ["Floorplan"] },
	"World"
]

SchemaElement

В SchemaElement есть 4 предопределенных ключа которые обрабатываются "из коробки"

ts
{
	"element": "a", // tag
	"props": { "href": "/link/to/page" }, // attrs
	"events": { "click": someAction }, // events
	"children": ["Link"] // Children nodes
	// ...
}
element required
  • string

Обязательный параметр, который определяет используемый html тэг (a, div, header, p и т.д.).

Для веб компонентов используется тот же принцип, но изначально их нужно зарегистрировать, например через менеджер ресурсов и WebComponent Loader, после чего можно будет передавать кастомный тэг в element

props optional
  • Record<string, any>

Опциональный параметр, который принимает объект с аттрибутами для элемента.

ts
[
	{
		element: "a",
		props: { href: "/link/to" }, 
	},
	{
		element: "img",
		props: { src: "/logo.jpg", alt: "logo" }, 
	},
];

Через данный параметр можно задавать data- аттрибуты, стили и любые другие аттрибуты, включая кастомные для WebComponents

events optional
  • Record<string, any>

Опциональный параметр который присваивает прослушиватели событий к элементу по заданному ключу

ts
{
	"element": "div",
	"events": { "click": (e) => console.log('click', e) }, 
}
children optional
  • Array<SchemaItem>

Опциональный параметр который принимает массив из строк и/или объектов схемы. Текущий объект будет являться родителем для всех потомков указанных в этом параметре.

ts
{
	"element": "a",
	"props": { "href": "/" },
	"children": ["Earth"] 
},
[custom] optional

Если вам нужно расширить набор ключей и обработчиков, то можно это реализовать благодаря системе Middleware в Traverse, например:

ts
// ...
const schema = [
	// ...
	{ element: "s3cret", code: "MySuperS3cretString" }, 
	// ...
];
// ...
renderer.traverse.use((node, next) => {
	if (node.element === "s3cret") {
		node.element = "span"; 
		node.children = [node.code.replace(node.code.slice(0, -2), "*******")]; 
	} 
	return next();
}); 
// ...