Мы собираемся обсудить alpine, который потенциально может заменить библиотеки, такие как jQuery или даже Angular, React или Vue, которые вы обычно используете при разработке веб-сайта.

Если вы регулярно создаете сайты, требующие добавления JavaScript в пользовательский интерфейс, чтобы улучшить взаимодействие с пользователем, эта статья для вас !!

Проведя много исследований и даже многократно используя его, я понял, что Alpine.js действительно может что-то найти.

Alpine.js против других

Если вы посмотрите на эту таблицу, вы действительно увидите разницу в размерах файлов между alpine и другими часто используемыми библиотеками / фреймворками.

Как и многие другие разработчики, мы обычно слишком усложняем свой рабочий процесс.

Мы всегда выбираем самые свежие и популярные библиотеки. Мы обращаемся к лучшим библиотекам, которые только можем найти в Интернете. Мы видим, что React, Angular и Vue имеют самые высокие ранги поиска, и вслепую начали их использовать.

Я думаю, что это неправильный подход, потому что во многих случаях этих библиотек слишком много, и ничего больше.

Я не пытаюсь ничего убрать из таких фреймворков, как Angular и React. На самом деле я использую их изо дня в день, и на самом деле у меня есть все мои кодовые базы в нескольких проектах angular. Я пытаюсь сказать, что есть некоторые веб-сайты, которым не нужны эти сложные и продвинутые фреймворки, потому что они действительно увеличивают размер, и вы можете увидеть это в таблице выше.

Когда (а когда нельзя) использовать Alpine

Если вы подумываете использовать Alpine в своем следующем проекте, позвольте мне кое-что прояснить.

Когда лучше избегать Alpine = ›

Вы НЕ должны обращаться к библиотекам, таким как alpine, когда ваш сайт:

  • Много манипуляций с данными
  • Требуются огромные проверки.
  • Приходится выполнять многочисленные вызовы API для получения и обработки данных.

Для этих сценариев я действительно рекомендую вам использовать Vue, React, Angular или любой другой фреймворк, который вам нравится.

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

Вам следует обращаться к таким библиотекам, как alpine, только если ваш веб-сайт:

  • Придется проделать базовые манипуляции с DOM.
  • При некоторых условиях вам необходимо добавлять классы при взаимодействии с пользователем.
  • Прослушайте некоторые события и измените пользовательский интерфейс.

Я думаю, что в этих сценариях Alpine.js - ваш лучший друг.

Установка

CDN:

Для начала вам просто нужно добавить этот тег скрипта в <head>:

Вот и все. Он инициализируется сам!

NPM:

Если вы предпочитаете устанавливать пакет из npm:

npm i alpinejs

Создание базового раскрывающегося списка

Начнем с реального примера.

Если мы нажмем на эту кнопку, выпадающий список станет видимым / открытым. Если щелкнуть еще раз, он исчезнет.

Давайте теперь разберемся с кодом = ›

<div x-data="{ open: false }">
    <button @click="open = true">Open Dropdown</button> 
    <ul
        x-show="open"
        @click.away="open = false"
    >
        Dropdown Body
    </ul>
</div>

Как вы можете видеть в коде, есть некоторые вещи, исходящие от Alpine, но не являющиеся родным HTML. Например, x-data, @click, x-show и т. Д.

  • x-data - это в основном данные, которые мы передаем компоненту (или в данном случае div). У него есть объект, который может иметь некоторые атрибуты и даже иметь функции. В данном случае это {open: false}.
  • При щелчке и использовании свойства @click этой кнопки переменная open должна быть равна true. Что тогда происходит? На заднем плане у нас есть неупорядоченный список, который в основном представляет собой раскрывающееся тело, и он становится видимым в зависимости от значения переменной open. Таким образом, если open истинно, мы фактически увидим ul или список, и всякий раз, когда мы нажимаем вне раскрывающегося списка, переменной open присваивается значение для принимает значение false, при этом раскрывающийся список скрывается.
  • С помощью @ click.away, если мы щелкнем где-нибудь еще на экране, срабатывает open = false, снова скрывая раскрывающийся список!

Это было довольно просто, и вы уже можете увидеть всю мощь этой библиотеки.

Создание счетчика символов в стиле Twitter

Давайте рассмотрим более сложный пример: давайте создадим счетчик персонажей с помощью alpine.

В основном у нас есть текстовая область, а под ней - количество символов, которые можно ввести. Мы позволим пользователям вводить 180 символов, и мы будем обновлять счетчик при каждом вводе под текстовой областью.

Рекомендуется: установите Alpine IntelliSense для VsCode, чтобы он давал вам соответствующие автозаполнения.

Шаг 1. Начнем с основного скелета.

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/gh/alpinejs/[email protected]/dist/alpine.min.js" defer></script>
</head>

<body>
    <div class="header">
        <h2>Character counter with Alpine</h2>
    </div>

</body>

</html>

Шаг 2: посыпьте альпийским

<body>
    <div class="header">
        <h2>Character counter with Alpine</h2>
    </div>
    <div x-data="{
        content: '',
        limit: 180
    }">
        <textarea></textarea>
        <p></p>
    </div>
</body>

Давайте передадим объект в формате x-data для div. Допустим, у нас есть некоторый контент (string), который сейчас пуст, и у нас есть ограничение, равное 180.

Кроме того, есть textarea, а ниже у нас есть абзац, в котором, наконец, будет отображаться количество символов.

Примечание. Я заранее добавил немного стиля, но вам не о чем беспокоиться.

Полный код находится в конце этого руководства!

Шаг 3: логика

Функция remaining() ниже должна в основном возвращать разницу между длиной содержимого и пределом.

<div x-data="{
    content: '',
    limit: 180,
    remaining() {
        return this.limit - this.content.length
    }
}">
    <textarea x-model="content"></textarea>
    <p>
        You have <span x-html="remaining()"></span> character left!
    </p>
</div>
  • span, потому что мы действительно хотим вычислить разницу между пределом и содержанием.
  • Самый простой способ - создать функцию remaining(), которая в основном будет возвращать разницу между пределом и длиной содержимого.
  • Давайте использовать и называть это внутри диапазона. Это обновит внутреннее HTML-содержимое диапазона с возвратом функции remaining().
  • На данный момент Alpine не знает, что у нас внутри textarea, поскольку не знает, что это за контент. Как связать эту переменную содержимого с моей текстовой областью? Для этого мы можем использовать x-model.

ВОЙЛА!

У нас есть довольно хорошее рабочее приложение, которое в основном сообщает нам, сколько символов вы ввели или сколько символов вы можете ввести в данный момент.

Полный код

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/gh/alpinejs/[email protected]/dist/alpine.min.js" defer></script>
    <style>
        textarea {
            width: 95%;
            height: 150px;
            padding: 12px 20px;
            box-sizing: border-box;
            border: 2px solid #ccc;
            border-radius: 4px;
            background-color: #f8f8f8;
            resize: none;
            margin-top: 20px;
            margin-left: 2.5%;
        }

        p {
            margin-left: 2.5%;
        }

        .header {
            padding-top: 10px;
            padding-bottom: 10px;
            text-align: center;
            background: #1abc9c;
            color: white;
            width: 95%;
            margin-left: 2.5%;
        }
    </style>
</head>

<body>
    <div class="header">
        <h2>Character counter with Alpine</h2>
    </div>
    <div x-data="{
        content: '',
        limit: 180,
        remaining() {
            return this.limit - this.content.length
        }
    }">
        <textarea x-model="content"></textarea>
    <p>
        You have <span x-html="remaining()"></span> character left!
    </p>
    </div>
</body>

</html>

Надеюсь, эта статья помогла вам понять основы Alpine.js.

Спасибо за прочтение. Если у вас есть вопросы, не стесняйтесь оставлять ответ.

Ресурсы

  1. Https://github.com/alpinejs/alpine
  2. Https://www.smashingmagazine.com/2020/03/introduction-alpinejs-javascript-framework/
  3. Https://www.alpinetoolbox.com/

Первоначально опубликовано на https://www.theimmigrantprogrammers.com.