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

ViewState API: личное состояние блока

Личное состояние блока, которое принадлежит этому браузеру, а не документу. Переключатель хранит здесь, открыт ли он, под ключом 'open'. Внутри инструмента это api.viewState.

Значения хранятся как JSON в localStorage под id документа. Они не сохраняются в документе и не уходят участникам совместной работы. Запись, которую не меняли 90 дней, удаляется.

Без localStorage значения живут в памяти только этой вкладки.

Обновлено 6 окт. 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');

Методы

viewState.get(blockId, key)

unknown

Значение блока под ключом key в этом браузере или undefined, если его нет.

TypeScript
const open = editor.viewState.get(blockId, 'open') === true;

viewState.set(blockId, key, value)

void

Сохраняет значение блока в этом браузере. Значение должно укладываться в JSON. Работает в режиме только для чтения и не попадает в историю отмены.

TypeScript
editor.viewState.set(blockId, 'open', true);

viewState.onChange(blockId, key, listener)

() => void

Вызывает listener с новым значением, когда его меняет эта вкладка или другая вкладка этого браузера с тем же документом. Возвращает функцию отписки.

TypeScript
const unsubscribe = editor.viewState.onChange(blockId, 'open', (value) => {
  setOpen(value === true);
});

// Later
unsubscribe();

viewState.isCreatedHere(blockId)

boolean

true для блока, который эта вкладка создала после отрисовки документа: из меню блоков, сочетанием клавиш, вставкой, преобразованием или разделением. false для блоков из сохранённого документа, из другой вкладки, от участника совместной работы, а также после отмены и повтора. Помогает открыть новый блок для того, кто его создал.

TypeScript
// In a block tool
constructor({ api, block }) {
  this.api = api;
  this.block = block;
}

rendered() {
  const { viewState } = this.api;
  const id = this.block.id;

  if (viewState.get(id, 'open') === undefined && viewState.isCreatedHere(id)) {
    viewState.set(id, 'open', true);
  }
}