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) в разработке поэтому тоже срабатывают
дважды — запускайте их из поведения формы или из эффекта компонента.