Skip to main content

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: [] } — остальное из шаблона