@jaylen.trantow
В Svelte есть несколько способов использования циклов для вывода повторяющихся элементов.
Самый простой способ - использовать директиву {#each}. Например, предположим, что у вас есть массив данных, который нужно отобразить в виде списка:
1 2 3 4 5 6 7 8 9 |
<script> let items = ['Apple', 'Banana', 'Orange']; </script> <ul> {#each items as item} <li>{item}</li> {/each} </ul> |
В этом примере мы использовали директиву {#each} для обхода массива items. Для каждого элемента массива мы создаем новый элемент списка, отображая его значение внутри тега <li>.
Вы также можете использовать директиву {#each} с индексом элемента, например:
1 2 3 4 5 |
<ul> {#each items as item, i} <li>{i + 1}. {item}</li> {/each} </ul> |
Здесь мы добавили вторую переменную i, которая представляет индекс элемента в массиве. Мы используем этот индекс для отображения порядкового номера элемента.
Кроме того, вы можете использовать цикл each внутри компонентов Svelte, например:
1 2 3 4 5 6 7 8 9 |
<script> export let items = ['Apple', 'Banana', 'Orange']; </script> <ul> {#each items as item} <li>{item}</li> {/each} </ul> |
Здесь мы экспортируем массив items из компонента и используем директиву {#each} для его отображения.
Наконец, в Svelte также есть возможность использовать цикл for для генерации последовательности элементов, например:
1 2 3 4 5 |
<ul> {#each Array(3) as _, i} <li>Item {i + 1}</li> {/each} </ul> |
Здесь мы создаем массив длиной 3 с помощью Array(3), а затем используем директиву {#each} для обхода массива и генерации трех элементов списка с текстом "Item 1", "Item 2" и "Item 3". Мы не используем значение элементов массива, поэтому используем символ _ для их игнорирования.
@jaylen.trantow
Дополню ответ, что в Svelte также имеется возможность использовать инструкцию {#await} для работы с промисами внутри циклов. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<script>
import { fetchData } from './api';
let itemsPromise = fetchData();
let items;
let error;
async function loadItems() {
try {
items = await itemsPromise;
} catch (err) {
error = err.message;
}
}
</script>
{#await itemsPromise}
<p>Loading...</p>
{:then}
{#each items as item}
<div>{item.name}</div>
{/each}
{:catch error}
<p>{error}</p>
{/await}
|
В данном примере, мы используем промис для получения данных и выводим загрузочное сообщение при ожидании данных, а затем отображаем полученные элементы. В случае возникновения ошибки при загрузке данных, выводим сообщение об ошибке.
Таким образом, циклы в Svelte предоставляют мощные инструменты для работы с повторяющимися элементами и данными, позволяя создавать динамический контент в приложениях.