Обновление с версии v2
Ниже приведено исчерпывающее руководство по основным изменениям в Alpine v3, но если вы предпочитаете что-то более интересное, вы можете просмотреть все изменения, а также новые функции в v3, посмотрев программный доклад Alpine Day 2021 «Будущее Alpine»:
Обновление с Alpine v2 до v3 должно пройти довольно безболезненно. Во многих случаях НИЧЕГО не нужно делать с вашей кодовой базой, чтобы использовать v3. Ниже приведён список критических изменений в порядке убывания вероятности того, что они повлияют на пользователей:
Критические изменения
$el
теперь всегда является текущим элементом
$el
теперь всегда представляет элемент, над которым было выполнено выражение, а не корневой элемент компонента. Это заменит большинство случаев использования x-ref
, а в тех случаях, когда всё же необходимо получить доступ к корневому элементу компонента, можно использовать $root
. Например:
Для более плавного обновления можно заменить все экземпляры $el
на пользовательскую магию $root
.
Автоматическое выполнение функций init()
, определённых в объекте data
Распространённой схемой в v2 был ручной вызов метода init()
(или аналогичного по названию метода) для объекта x-data
.
В v3 Alpine будет автоматически вызывать методы init()
у объектов данных.
Необходимо вызывать Alpine.start()
после импорта
Если вы импортировали Alpine v2 из NPM, теперь вам нужно будет вручную вызывать Alpine.start()
для v3. Это не повлияет на вас, если вы используете файл сборки Alpine или CDN из тега <template>
.
Вместо x-show.transition
теперь используется x-transition
Все удобства, предоставляемые хелперами x-show.transition...
, по-прежнему доступны, но теперь из более унифицированного API: x-transition
:
x-if
больше не поддерживает x-transition
Возможность перемещать элементы и добавлять их до/после удаления из DOM больше не доступна в Alpine.
Это была функция, о существовании которой даже мало кто знал, не говоря уже об использовании.
Поскольку система переходов сложна, с точки зрения обслуживания имеет смысл поддерживать переходные элементы только с помощью x-show
.
x-data
теперь имеет каскадную область видимости
Область, определённая в x-data
, теперь доступна всем дочерним элементам, если только она не перезаписана вложенным выражением x-data
.
x-init
больше не принимает функцию обратного вызова
До v3, если x-init
получал возвращаемое значение, являющееся «функцией» typeof
, он выполнял обратный вызов после того, как Alpine завершала инициализацию всех остальных директив в дереве. Теперь вам нужно вручную вызывать $nextTick()
, чтобы добиться такого поведения. x-init
больше не «распознает возвращаемое значение».
Возврат false
из обработчиков событий больше не приводит к неявному preventDefault
Alpine v2 воспринимает возвращаемое значение false
как желание запустить preventDefault
для события. Это соответствует стандартному поведению встроенных слушателей: <... oninput="someFunctionThatReturnsFalse()">
. Alpine v3 больше не поддерживает этот API. Большинство людей не знают о его существовании, и поэтому поведение является удивительным.
Вместо x-spread
теперь используется x-bind
Одна из историй повторного использования функциональности в Alpine — абстрагирование директив Alpine в объекты и применение их к элементам с помощью x-spread
. Это поведение осталось прежним, за исключением того, что теперь вместо x-spread
нужно использовать x-bind
.
Использование глобальных событий жизненного цикла вместо Alpine.deferLoadingAlpine()
x-ref
больше не поддерживает связывание
В Alpine v2 для кода ниже
после нажатия кнопки отображались все $refs
. Однако в Alpine v3 возможен доступ только к $refs
для элементов, созданных статически, поэтому, как и ожидалось, будет возвращена только первая ссылка.
IE11 больше не поддерживается
Alpine больше не будет официально поддерживать Internet Explorer 11. Если вам нужна поддержка IE11, мы рекомендуем по-прежнему использовать Alpine v2.
Устаревшие API
Следующие два API по-прежнему будут работать в версии 3, но считаются устаревшими и, вероятно, будут удалены в какой-то момент в будущем.
-
Замените модификатор слушателя событий
.away
на.outside
-
Используйте
Alpine.data()
вместо глобальных функций