``` import "./formik-demo.css"; import React from "react"; import { render } from "react-dom"; import { Formik, Field } from "formik"; import Yup from "yup"; import classNames from "classnames"; // Input feedback const InputFeedback = ({ error }) => error ?
{error}
: null; // Checkbox input const Checkbox = ({ field: { name, value, onChange, onBlur }, form: { errors, touched, setFieldValue }, id, label, className, ...props }) => { return (
{touched[name] && }
); }; // Checkbox group class CheckboxGroup extends React.Component { constructor(props) { super(props); } handleChange = event => { const target = event.currentTarget; let valueArray = [...this.props.value] || []; if (target.checked) { valueArray.push(target.id); } else { valueArray.splice(valueArray.indexOf(target.id), 1); } this.props.onChange(this.props.id, valueArray); }; handleBlur = () => { // take care of touched this.props.onBlur(this.props.id, true); }; render() { const { value, error, touched, label, className, children } = this.props; const classes = classNames( "input-field", { "is-success": value || (!error && touched), // handle prefilled or user-filled "is-error": !!error && touched }, className ); return (
{label} {React.Children.map(children, child => { return React.cloneElement(child, { field: { value: value.includes(child.props.id), onChange: this.handleChange, onBlur: this.handleBlur } }); })} {touched && }
); } } // Radio input const RadioButton = ({ field: { name, value, onChange, onBlur }, id, label, className, ...props }) => { return (
); }; // Radio group const RadioButtonGroup = ({ value, error, touched, id, label, className, children }) => { const classes = classNames( "input-field", { "is-success": value || (!error && touched), // handle prefilled or user-filled "is-error": !!error && touched }, className ); return (
{label} {children} {touched && }
); }; const App = () => (

Radio & checkbox inputs with Formik

{ setTimeout(() => { console.log(JSON.stringify(values, null, 2)); actions.setSubmitting(false); }, 500); }} render={({ handleSubmit, setFieldValue, setFieldTouched, values, errors, touched, isSubmitting }) => (

Single checkbox

Checkbox group

Radio group

Single radio

Is that a valid use case?

)} />
); render(, document.getElementById("root")); ```