```
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 (
);
}
}
// 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 (
);
};
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
}) => (
)}
/>
);
render(, document.getElementById("root"));
```