ФреймворкJavaScript
React-компонент BlokEditor
Компонент-редактор «всё в одном», который поставляют адаптеры фреймворков: <BlokEditor> в @bloklabs/react и @bloklabs/vue, <blok-editor> (BlokEditorComponent) в @bloklabs/angular. Он принимает любую опцию конфигурации редактора как проп, пробрасывает неизвестные пропы на контейнерный div и даёт доступ к живому экземпляру Blok через ref/onReady. Пропы ниже описывают специфичную для адаптеров поверхность; остальное совпадает с опциями раздела «Конфигурация».
Обновлено 17 июл. 2026 г.Редактировать на GitHub
TypeScript
import { useState } from 'react';
import { BlokEditor } from '@bloklabs/react';
import { Header, Paragraph, List } from '@bloklabs/core/tools';
import type { OutputData } from '@bloklabs/core';
export function Editor() {
const [data, setData] = useState<OutputData>();
// data + onSave form a controlled component: onSave fires (debounced)
// with the serialized document; echoing it back is deduped and
// caret-stable, while genuine external data changes re-render in place.
return (
<BlokEditor
tools={{ paragraph: Paragraph, header: Header, list: List }}
data={data}
onSave={setData}
theme="auto"
className="my-editor"
/>
);
}Компонент BlokEditor
| Свойство | Описание | |
|---|---|---|
tools | Record<string, ToolConstructable | ToolSettings> | Регистрируемые блок-инструменты. Функции внутри конфигурации инструмента (например, колбэк загрузчика) автоматически перепривязываются к последнему рендеру — свободно передавайте инлайновые замыкания; запись в deps нужна только при смене классов инструментов. |
data | OutputData | Содержимое редактора (реактивное). Задаёт начальный документ; после монтирования новое содержимое перерисовывается на месте. Обновления дедуплицируются глубоким сравнением, поэтому возврат собственного вывода редактора никогда не сбивает каретку. |
onSave | (data: OutputData, api: API) => void | Выходная половина контролируемого компонента: срабатывает (с дебаунсом) с полным сериализованным документом при каждом изменении — не нужно вручную опрашивать save(). Связка onSave={setData} безопасна и не зацикливается. |
onChange | (api: API, event: CustomEvent) => void | Низкоуровневые события мутаций (блок добавлен/изменён/перемещён/удалён) — когда нужна погранулярность мутаций, а не сериализованный вывод. |
onReady | (editor: Blok) => void | Вызывается один раз с живым экземпляром Blok. Срабатывает после фиксации пробрасываемого ref, поэтому ref.current к этому моменту уже заполнен. |
deps | DependencyList | Значения, при смене идентичности которых редактор уничтожается и создаётся заново (для структурной конфигурации вроде классов инструментов). Держите каждое значение референциально стабильным. Функции внутри конфигурации инструментов сюда НЕ входят — они перепривязываются к последнему рендеру автоматически. |
readOnly | boolean | ReadOnlyModeConfig | Режим «только чтение». Реактивный: после монтирования переключается на месте, без перемонтирования. |
theme | 'light' | 'dark' | 'auto' | Цветовая тема (реактивная). Не оборачивайте компонент в styled() или HOC, резервирующий проп theme — он не дойдёт до редактора. |
onThemeChange | (resolvedTheme: 'light' | 'dark') => void | Вызывается с разрешённой темой при каждом её изменении (например, когда 'auto' следует за ОС). |
width | 'narrow' | 'full' | Режим ширины содержимого (реактивный). После монтирования синхронизируется через editor.width.set(). |
style | BlokConfig['style'] | The all-in-one editor component shipped by the framework adapters — <BlokEditor> in @bloklabs/react and @bloklabs/vue, <blok-editor> (BlokEditorComponent) in @bloklabs/angular. It accepts every editor config option as a prop, forwards unknown props to the container div, and exposes the live Blok instance via ref/onReady. The props below cover the adapter-specific surface; everything else matches the Configuration options. |
i18n | BlokConfig['i18n'] | The all-in-one editor component shipped by the framework adapters — <BlokEditor> in @bloklabs/react and @bloklabs/vue, <blok-editor> (BlokEditorComponent) in @bloklabs/angular. It accepts every editor config option as a prop, forwards unknown props to the container div, and exposes the live Blok instance via ref/onReady. The props below cover the adapter-specific surface; everything else matches the Configuration options. |
autofocus | boolean | Сфокусировать редактор после монтирования. |
placeholder | string | false | Плейсхолдер в первом пустом блоке. |
onBlocksRendered | (payload: BlocksRenderedPayload) => void | Вызывается после завершения пакетного рендера (событие ядра blocks:rendered) — декларативный аналог editor.on('blocks:rendered', …). |
onBlockRendered | (payload: BlockRenderedPayload) => void | Вызывается для каждого блока, отрендеренного в DOM (событие ядра block:rendered). |
ref | Ref<Blok | null> | Пробрасывается к живому экземпляру Blok для императивных вызовов (save, render, blocks, caret, …). Равен null до монтирования редактора. |
className, id, … | HTMLAttributes<HTMLDivElement> | Любой проп, не являющийся опцией конфигурации редактора, пробрасывается на контейнерный div. Стилизуйте редактор через className (style сохраняет своё значение из конфигурации). |