В Riot.js работа с коллекциями данных и их динамическое отображение
осуществляется через встроенные механизмы итерации. Основной инструмент
для этого — директива each, которая позволяет обходить
массивы и объекты и создавать повторяющиеся элементы интерфейса без
лишнего кода.
eachСинтаксис each основан на шаблонной конструкции:
<ul>
<li each={item, index in items}>{item.name}</li>
</ul>
Пояснения:
item — текущий элемент массива.index — индекс текущего элемента (опционально).items — массив или объект, который подлежит
итерации.li можно использовать все свойства
текущего элемента.Riot.js автоматически отслеживает изменения в массиве
items и обновляет DOM без перерисовки всего списка. Это
позволяет создавать высокопроизводительные интерфейсы при работе с
динамическими данными.
Для объектов each также поддерживает ключи и
значения:
<ul>
<li each={value, key in userInfo}>{key}: {value}</li>
</ul>
key — ключ свойства объекта.value — значение соответствующего свойства.userInfo — объект, содержащий данные для
отображения.Такой подход упрощает рендеринг форм, настроек или любых других структурированных данных.
each можно сочетать с условными конструкциями:
<ul>
<li each={item in items} if={item.active}>{item.name}</li>
</ul>
if={item.active} фильтрует элементы в момент
рендеринга.Riot.js предоставляет реактивную обработку массивов. Добавление, удаление или изменение элементов автоматически обновляет DOM:
this.items.push({ name: 'Новый элемент' });
this.items.splice(1, 1); // удаление второго элемента
this.update();
push, splice, pop и
другие изменяют массив.this.update() синхронизирует изменения с
интерфейсом.Riot.js поддерживает вложенные итерации, что полезно для сложных структур данных, например, таблиц:
<table>
<tr each={row in tableData}>
<td each={cell in row}>{cell}</td>
</tr>
</table>
each создаёт ячейки таблицы на основе
элементов строки.Для больших массивов рекомендуется использовать ключи для повышения производительности:
<li each={item in items} key={item.id}>{item.name}</li>
key позволяет Riot.js корректно сопоставлять
элементы при обновлении массива.Можно комбинировать методы массивов прямо в директиве
each:
<li each={item in items.filter(i => i.active).sort((a,b) => a.age - b.age)}>
{item.name} ({item.age})
</li>
each — основной инструмент для обхода массивов и
объектов.key) обеспечивают корректное обновление больших
массивов.each,
вынося фильтрацию и сортировку в методы компонента.key, value in object для явного
контроля над ключами и значениями.В Riot.js циклы и итерация данных обеспечивают мощную, но простую
систему динамического рендеринга. Использование each с
ключами, условием и вложенными конструкциями позволяет создавать гибкие
интерфейсы с минимальной затратой ресурсов и высоким уровнем читаемости
кода.