Что такое Svelte?
Svelte - это компонентный фреймворк, такой как React или Vue, но с важным отличием. Традиционные фреймворки позволяют писать декларативный код, управляемый состоянием, но есть штраф: браузер должен выполнять дополнительную работу для преобразования этих декларативных структур в операции DOM, используя такие методы, как виртуальное различие DOM, которое поглощает ваш бюджет рамок и налог на сборщика мусора.
Вместо этого Svelte запускается во время сборки, преобразовывая ваши компоненты в высокоэффективный императивный код, который хирургически обновляет DOM. В результате вы можете писать амбициозные приложения с превосходными характеристиками производительности.
Хотите узнать больше о Svelte?
Я открыл для себя Svelte всего несколько месяцев назад и был поражен тем, насколько легко начать работу и насколько он эффективен. Я настоятельно рекомендую потратить пару минут на Svelte 3: Переосмысление реактивности и обязательно посмотреть потрясающий доклад Рича Харриса (создателя Svelte.js).
Покажи мне код!
В этой статье предполагается, что вы уже знаете, что такое двусторонняя привязка (или двусторонняя привязка данных).
Двусторонняя привязка к текстовому элементу ввода
При вводе текста мы просто используем bind:value="{someVariable}"
, чтобы связать атрибут значения элемента ввода с переменной inputVariable.
<script> let inputValue = ''; </script> <input type="text" bind:value="{inputValue}"
Двухсторонняя привязка к раскрывающемуся выбору
Для элемента select мы используем тот же подход. Обратите внимание, что с selectValue = "Green"
будет предварительно выбран вариант со значением «Зеленый».
<script> let selectValue = "Green"; </script> <select bind:value="{selectValue}"> <option value="Red">Red</option> <option value="Green">Green</option> </select>
Двухсторонняя привязка к входному радио
Ниже у нас есть два радио входа, и мы хотим, чтобы пользователь выбрал мужской или женский пол в качестве пола. В этом случае мы используем bind:group="{someVariable}"
, и в этом случае переменная будет содержать либо Male, либо Female. Обратите внимание, что оба входа имеют одинаковый атрибут имени, но разные значения. Это гарантирует, что будет отмечен только один из радиовходов.
<script> let radioValue = "Male"; </script> Select Gender: <br> <label> <input type="radio" name="gender" value="Male" bind:group="{radioValue}"> Male </label> <label> <input type="radio" name="gender" value="Female" bind:group="{radioValue}"> Female </label>
Флажок с двухсторонней привязкой при вводе
Ниже у нас есть 3 флажка, и мы хотим, чтобы пользователь выбрал свои любимые фреймворки. В этом случае мы позволяем пользователю выбирать несколько значений. Мы снова будем использовать bind:group="{someVariable}"
, но в этом случае переменная должна быть массивом, потому что значение каждого флажка будет помещено внутри массива, если флажок установлен.
<script> let checkboxValue = []; </script> <label> <input type="checkbox" name="framework" value="Vue" bind:group="{checkboxValue}"> Vue </label> <label> <input type="checkbox" name="framework" value="Svelte" bind:group="{checkboxValue}"> Svelte </label> <label> <input type="checkbox" name="framework" value="React" bind:group="{checkboxValue}"> React </label>
Если мы хотим привязаться к одному флажку и знать, установлен ли он или нет, мы должны использовать bind:checked="{someVariable}"
, и переменная будет содержать либо true, либо false, указывая, установлен флажок или нет.
<script> let singleCheckbox = false; </script> <label> Svelte is awesome. Do you agree? <input type="checkbox" bind:checked="{singleCheckbox}"> </label>
Двусторонняя привязка к пользовательскому элементу (компоненту)
Пользовательский компонент под ним - это просто элемент ввода, который можно привязать из родительского компонента. Уведомление export let prop
. Это способ создания стройных опор. Итак, в родительском компоненте мы подключаем экспортируемую переменную из дочернего к переменной в родительском компоненте. В частности, bind:prop="componentValue"
// Parent Component <script> import Input from './Input.svelte'; let componentValue = ""; </script> <Input bind:prop="{componentValue}"/> //Child Component <script> export let prop; </script> <input type="text" placeholder="Type Something" bind:value="{prop}">
В приведенном выше примере в пользовательском компоненте я использовал имя опоры prop
. Конечно, вы можете использовать любое имя, какое захотите.
В примере thiscodeanbox вы можете найти весь код, который я использовал в этой статье.
Прочтите Svelte Docs о привязках элементов.
Не стесняйтесь комментировать и задавать любые вопросы. Буду рад помочь.