Автономные шаблоны lit-html¶
Lit соединяет модель компонентов LitElement с отрисовкой на литералах шаблонов JavaScript. Часть, отвечающая за шаблоны, вынесена в отдельную библиотеку lit-html. Её можно использовать вне модели компонентов Lit везде, где нужно эффективно создавать и обновлять HTML.
Пакет lit-html¶
Пакет lit-html ставится отдельно от lit:
1 | |
Основные импорты — html и render:
1 | |
В автономный пакет lit-html также входят модули возможностей, которые описаны в руководстве Lit:
lit-html/directives/*— встроенные директивыlit-html/directive.js— пользовательские директивыlit-html/async-directive.js— пользовательские асинхронные директивыlit-html/directive-helpers.js— помощники директив для императивных обновленийlit-html/static.js— статический тег htmllit-html/polyfill-support.js— поддержка полифилов веб-компонентов, см. стили и шаблоны lit-html
Отрисовка шаблонов lit-html¶
Шаблоны Lit пишут литералами шаблонов JavaScript с тегом html. Содержимое литерала — в основном обычный декларативный HTML. В него можно вставлять выражения, которые создают и обновляют динамические части. Полный синтаксис — в обзоре шаблонов.
1 | |
Выражение шаблона lit-html само по себе не создаёт и не обновляет DOM. Это только описание DOM — TemplateResult. Чтобы создать или обновить DOM, передайте TemplateResult функции render() вместе с контейнером:
1 2 3 4 5 | |
Динамические данные¶
Чтобы шаблон был динамическим, напишите функцию шаблона и вызывайте её, когда данные меняются.
1 2 3 4 5 6 7 8 9 10 11 | |
Когда вызывается функция шаблона, lit-html запоминает текущие значения выражений. Узлы DOM при этом не создаются, поэтому вызов быстрый и дешёвый.
Функция возвращает TemplateResult с шаблоном и входными данными. В этом главный принцип lit-html: интерфейс — это функция состояния.
При вызове render lit-html обновляет только те части шаблона, которые изменились с прошлой отрисовки. Поэтому обновления быстрые.
Параметры отрисовки¶
Метод render принимает аргумент options:
host— значениеthisпри вызове обработчиков, записанных синтаксисом@eventName. Параметр действует, только если обработчик — обычная функция. Если передан объект-обработчик, в качествеthisиспользуется он. Подробнее — в выражениях обработчиков событий.renderBefore— необязательный узел внутриcontainer, перед которым lit-html отрисует результат. По умолчанию разметка добавляется в конец контейнера.renderBeforeпозволяет выбрать конкретное место.creationScope— объект, у которого lit-html вызываетimportNodeпри клонировании шаблонов. По умолчанию этоdocument. Параметр нужен для сложных случаев.
Пример параметров при автономном использовании lit-html:
1 2 3 4 | |
1 2 3 4 | |
Шаблон окажется между элементами <header> и <footer>.
Параметры отрисовки должны быть постоянными. Между повторными вызовами render их менять не следует.
Стили и шаблоны lit-html¶
lit-html делает одно дело: отрисовывает HTML. Как стилизовать получившуюся разметку, зависит от того, как вы её используете. Внутри компонентной системы вроде LitElement следуйте её правилам.
В общем случае способ зависит от теневого DOM:
- Если вы рисуете не в теневой DOM, стили можно задать глобальными таблицами стилей.
- Если рисуете в теневой DOM, внутрь теневого корня можно поместить теги
<style>.
Стилизация теневых корней в устаревших браузерах требует полифилов. Полифил ShadyCSS вместе с автономным lit-html требует загрузить lit-html/polyfill-support.js и передать в RenderOptions параметр scope с именем тега хоста, чтобы ограничить область отрисованного содержимого. Так можно сделать, но если нужна отрисовка шаблонов lit-html в теневой DOM на устаревших браузерах, лучше использовать LitElement.
Для динамических стилей в lit-html есть две директивы:
classMapзадаёт классы элемента по свойствам объекта.styleMapзадаёт стили элемента по карте свойств и значений.