Перейти к содержимому
ФреймворкJavaScript

History API: отмена, повтор и транзакции

Управляйте отменой и повтором операций редактора.

Обновлено 24 сент. 2026 г.Редактировать на GitHub

Как получить экземпляр редактора

Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.

TypeScript
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;

// Call any API method on it.
editor.caret.setToLastBlock('end');

Методы

history.undo()

void

Отменить последнюю операцию. В режиме только для чтения метод ничего не делает, как и Cmd+Z.

Когда использовать

Программный Ctrl/Cmd+Z. Ничего не делает, когда отменять нечего или редактор в режиме только для чтения. Проверяйте canUndo() для своих кнопок.

TypeScript
// Undo last change
editor.history.undo();

// Undo multiple times
for (let i = 0; i < 3; i++) {
  editor.history.undo();
}

history.redo()

void

Повторить последнюю отменённую операцию. В режиме только для чтения метод ничего не делает, как и Cmd+Shift+Z.

Когда использовать

Программный Ctrl/Cmd+Shift+Z. В режиме только для чтения ничего не делает. Проверяйте canRedo() в своём UI, чтобы кнопка корректно отключалась.

TypeScript
// Redo last undone change
editor.history.redo();

// Redo multiple times
for (let i = 0; i < 3; i++) {
  editor.history.redo();
}

history.canUndo()

boolean

Проверить, доступна ли отмена (есть ли операции для отмены).

Когда использовать

Используйте, чтобы включать и отключать свою кнопку отмены. Работает в паре с undo().

TypeScript
if (editor.history.canUndo()) {
  editor.history.undo();
} else {
  console.log('Nothing to undo');
}

history.canRedo()

boolean

Проверить, доступен ли повтор (есть ли отменённые операции для повтора).

Когда использовать

Используйте, чтобы включать и отключать свою кнопку повтора. Работает в паре с redo().

TypeScript
if (editor.history.canRedo()) {
  editor.history.redo();
} else {
  console.log('Nothing to redo');
}

history.clear()

void

Очистить всю историю. Удаляет все записи отмены и повтора.

Когда использовать

Сбрасывает весь стек отмены. render() уже делает это сам, поэтому вызывайте метод после загрузки контента другим способом, например через insertMany(). Тогда нельзя будет отменить действия и вернуться к предыдущему документу.

TypeScript
// render() already clears history.
// Clear it yourself after loading content another way.
editor.blocks.insertMany(loadedBlocks);
editor.history.clear();