Загрузчик Части для движка, Скелет и «Повторить»
Свой Инструмент, чей Tiptap приходит отдельным чанком, — и что видит автор, пока чанк едет или не доехал.
Часть для движка можно отдать не массивом, а загрузчиком — функцией с динамическим импортом. Тогда модуль с описанием Инструмента можно импортировать и на сервере (правила Схемы — данные), а Tiptap и React уходят в отдельный чанк.
Нажмите «Restart the editor» — полторы секунды поле будет Скелетом. Отметьте «Fail the first load» и перезапустите: появится ошибка поля и кнопка «Повторить».
Как устроено
- Готовность ждёт загрузчики. Движок создаётся, когда отработали загрузчики всех Инструментов
набора: Схема фиксируется при создании, и Блоки без своей Части для движка потерялись бы при
разборе. До того методы Хэндла тихие, а
onReadyне вызван. - Скелет — рамка, место Панели и Документ, очищенный Схемой, без ввода и без прыжка высоты. Блок, чей загрузчик ещё не отработал, виден текстом. На сервере Скелет — только рамка.
- Сбой загрузки — ошибка поля «Редактор не запустился» и «Повторить». Кнопка зовёт заново только упавшие загрузчики; Документ всё это время виден.
- Промис кэшируется на функции загрузчика: второй Редактор с тем же Инструментом ничего не ждёт. Поэтому загрузчик — одна функция на модуль, а не новая стрелка на каждый рендер. Пример строит новый загрузчик на каждый перезапуск только ради показа.
Блок кода и таблица в пресете full тоже ленивые: их Часть для движка приходит отдельным чанком.
Чтобы чанк пришёл вместе со страницей, поставьте на него modulepreload — адрес берите из
манифеста сборщика. Цена «старта» и «полного» — в «Сколько стоит импорт».