Компонент Field
- это то, что связывает поле формы с состоянием Formik. Он использует контекст под капотом; Formik
является поставщиком контекста, а Field
является потребителем контекста. Field
привязан к Formik
и не имеет смысла вне его. Для вашего случая использования, когда вы хотите визуализировать поля формы, которые иногда связаны с Formik, а иногда нет, я бы экспортировал два разных компонента:
- Базовый компонент Checkbox, который не имеет ничего общего с Formik. Нужно просто использовать нормальный ввод
- Обертка Field вокруг этого компонента Checkbox
В то время как компонент Field
может взять type
, в результате чего он рендерит соответствующий ввод, он также может взять опору рендеринга для рендеринга того, что вы хотите, и он передается всем Формик управляет этим полем.
Например, компоненты Checkbox и CheckboxField могут выглядеть примерно так:
const Checkbox = (props) => {
...
return (
<div className={myClass1}>
<input type='checkbox' checked={props.checked} onChange={props.onChange} />
<label ...>{props.label}</label>
</div>
)
};
const CheckboxField = (props) => {
return (
<Field name={props.name}>
{(field) => <Checkbox label={props.label} {...field} />}
</Field>
)
}
Теперь у вас есть два компонента, которые отображаются одинаково, но один предназначен для использования в форме Formik (CheckboxField
), а другой может использоваться где угодно (Checkbox
).