arrayOf()
function arrayOf<U>(blank, items): U[];
Defined in: model/model-nodes.ts:151
Массив модели с шаблоном нового элемента.
Шаблон — фабрика значения, которое получает push() / insertAt(i) без аргумента: кнопка
«Добавить» секции массива, model.items.push() в поведении. Частичное значение
(push({ type: 'house' })) дополняется из шаблона. Объявляется там же, где остальные
начальные значения, — в модели; схеме и JSX знать его не нужно.
Возвращает обычный массив: тип поля остаётся U[]. Шаблон переживает set / patch / reset
модели. Вложенные массивы объявляются внутри шаблона элемента — тогда и элементы, пришедшие
обычными данными (загрузка с сервера), получают их шаблоны.
Шаблон привязан к самому массиву, поэтому до createModel его нельзя копировать:
structuredClone, JSON.parse(JSON.stringify(…)) и [...array] отдают массив без шаблона, и
push() без значения бросит ошибку. Начальные значения с arrayOf держат в фабрике
(const initial = () => ({ items: arrayOf(blank) })), а не в константе, которую клонируют.
Type Parameters
U
U
Тип элемента массива.
Parameters
blank
() => U
Фабрика нового элемента. Вызывается на каждое добавление — значение не делится между элементами.
items
readonly U[] = []
Начальные элементы. По умолчанию массив пуст.
Returns
U[]
Массив начальных значений с шаблоном.
Example
const blankPhone = () => ({ number: '' });
const blankCoBorrower = () => ({ name: '', phones: arrayOf(blankPhone) });
const model = createModel({ coBorrowers: arrayOf(blankCoBorrower) });
model.coBorrowers.push(); // { name: '', phones: [] }
model.coBorrowers.at(0).phones.push(); // { number: '' }
model.coBorrowers.push({ name: 'Анна' }); // { name: 'Анна', phones: [] } — остальное из шаблона