This is version 4 beta of Forma 36Go back to last stable version 3
Forma 36

Checkbox

Checkbox is a form component that shows a checkbox with it's label.
Checkbox.Group is a component that makes it easier to handle group of checkboxes.

Table of contents

How to use Checkbox

You can use the Checkbox as a controlled or uncontrolled input.

Using as a controlled input

For using the Checkbox as a controlled input, you need to:

  • Pass the isChecked property, with this property it will already be a controlled component;
  • Pass a onChange handler, so you can use it to update the value of isChecked;

Setting the isChecked will already define it as a controlled input.

const ExampleControlled = () => {
const [checkboxState, setCheckboxState] = useState(false);
return (
<Checkbox
name="newsletter-subscribe-controlled"
id="newsletter-subscribe-controlled"
isChecked={checkboxState}
onChange={() => setCheckboxState(!checkboxState)}
>
Subscribe to newsletter
</Checkbox>
);
};

Using as an uncontrolled input

You can use the Checkbox as an uncontrolled input, for that you can:

  • Set the defaultChecked property, it will ensure that the checked state can be altered normally.
  • Don't set the isChecked as it will make the input controlled.
<Checkbox
name="newsletter-subscribe-uncontrolled"
id="newsletter-subscribe-uncontrolled"
defaultChecked
>
Subscribe to newsletter
</Checkbox>

Using with Group

We also provide the Checkbox.Group component that helps when using multiple checkboxes. You can pass some common properties on the Checkbox.Group level and they will be passed to the checkboxes inside the group.

  • spacing: This will set how much space should be between the inputs;
  • name: By setting this property on the Checkbox.Group level, you will set it automatically for all the checkboxes in the group;
  • defaultValue: This accepts an array that set the defaultChecked property for checkboxes which the value exists in the array;
  • value: Same as defaultValue but this one sets the isChecked property, making the checkbox group controlled;
  • onChange: Handler that will be executed when any checkbox inside the group receives the event of change.

Code examples

Component variations

Checked or indeterminate

The Checkbox can be rendered as indeterminate or checked, with the isIndeterminate, and isChecked or defaultChecked properties.
Note that providing the isChecked makes it a controlled input, requiring an onChange handler.

The Checkbox can be rendered as disabled with the isDisabled property.

Content recommendations

  • Use direct, succinct copy that helps the user to successfully complete the form
  • Do not use punctuation for labels
  • Use sentence style caps (in which only the first word of a sentence or term is capitalized)

Accessibility

  • To ensure Checkbox meets accessibility standards, provide name and id;
  • When using Checkbox.Group it should be wrapped in a <FormControl as="fieldset"> and have a <FormControl.Label as="legend">.

Props

Props Checkbox

NameRequiredDefaultTypeDescription
aria-labelstringValue to be set as aria-label if not passing a children
defaultCheckedfalse
false
true
Defines initial checked state for an uncontrolled component
helpTextstringOptional text to be added as help text bellow the label
idstringSets the id of the input
inputPropsPartial<DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>>Additional props that are passed to the input element
isCheckedundefined
false
true
Defines if the element is checked, onChange will be required
isDisabledfalse
false
true
Applies disabled styles
isIndeterminatefalse
false
true
Defines if the state is indeterminate
isInvalidfalse
false
true
Applies invalid styles
isRequiredfalse
false
true
Validate the input
labelstring
namestringSet the name of the input
onBlurFocusEventHandler<HTMLInputElement | HTMLTextAreaElement>Allows to listen to an event when an element loses focus
onChangeChangeEventHandler<HTMLInputElement>Allows to listen to an input’s change in value
onFocusFocusEventHandler<HTMLInputElement | HTMLTextAreaElement>Allows to listen to an event when an element get focused
onKeyDownKeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement>Allows to listen to an event when a key is pressed
resizevertical"none" | "both" | "horizontal" | "vertical"Sets whether an element is resizable, and if so, in which directions
valuestringSet the value of the input
willBlurOnEsctrue
false
true
Boolean property that allows to blur on escape
classNamestringCSS class to be appended to the root element
styleCSSPropertiesAccepts a JavaScript object with camelCased properties rather than a CSS string
testIdstringA [data-test-id] attribute used for testing purposes

Props Group

NameRequiredDefaultTypeDescription
defaultValuestring[]Array of values of the checkboxes that should be checked for uncontrolled inputs
namestringName that will be assigned to all checkboxes inside the group, unless a different name is passed to the checkbox
onBlurFocusEventHandler<HTMLInputElement>Handler that will be triggered when any checkbox inside the group loses focus
onChangeChangeEventHandler<HTMLInputElement>Handler that will be triggered when any checkbox inside the group has their checked state changed
valuestring[]Array of values of the checkboxes that should be checked for controlled inputs
childrenrequiredReactNodeElements that should be in the group
classNamestringCSS class to be appended to the root element
styleCSSPropertiesAccepts a JavaScript object with camelCased properties rather than a CSS string
testIdstringA [data-test-id] attribute used for testing purposes