Перейти к основному содержимому

useFormBundle()

function useFormBundle<B>(factory): B;

Defined in: platforms/react/hooks/use-form-bundle.ts:69

Собрать форму один раз и держать её стабильной; живую стратегию валидации армировать в эффекте (не при SSR — там эффекты не выполняются); при размонтировании снять сборку.

Type Parameters​

B​

B extends FormBundleLike

Тип бандла конкретной фабрики.

Parameters​

factory​

() => B

Фабрика бандла, обычно () => createForm({…}). Сборкой владеет хук: при размонтировании он вызывает её dispose(), поэтому фабрика должна собирать НОВУЮ форму, а не возвращать чужую, живущую дольше компонента.

Returns​

B

Стабильный бандл.

Example​

const credit = useFormBundle(() => createForm<CreditForm>({ model: createCreditModel() }));

Remarks​

Передавайте именно фабрику: useState трактует функцию как ленивый инициализатор, а некоторые части бандла сами являются функциями (RenderSchemaProxy), поэтому useFormBundle(bundle.render) вызвал бы её вместо сохранения.

Сборка снимается микрозадачей после размонтирования, а не в самой очистке эффекта (см. шапку модуля): код, который сразу после размонтирования пишет в модель, ещё видит живое поведение.

Ограничение StrictMode (только разработка). StrictMode вызывает ленивый инициализатор useState дважды, и фабрика на монтирование срабатывает два раза. Второй бандл React выбрасывает до коммита: хук его не видит, поэтому не армирует и не снимает. Живая проверка у него не запущена, но поведение (compute, onChange, …) работает, пока бандл не соберёт сборщик мусора. В production инициализатор вызывается один раз и утечки нет. Побочные эффекты на создание (запрос данных в фабрике или в setup) в разработке поэтому тоже срабатывают дважды — запускайте их из поведения формы или из эффекта компонента.