Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Checkbox component for Stripe Apps


Checkbox component for Stripe Apps

Use checkboxes to indicate or control boolean values.

SDK version

To add the Checkbox component to your app:

Loading example...

<Checkbox
 label="This is a Checkbox."
 onChange={(e) => {
 console.log(e.target.checked);
 }}
/>

Checkbox takes the following props, in addition to all the appropriate native DOM attributes.

Checkbox props

PropertyType
autoFocusOptional boolean | undefined If true, React will focus the element on mount.
checkedOptional boolean | undefined Controls whether the input is selected. When you pass this prop, you must also pass an onChange handler that updates the passed value.
defaultCheckedOptional boolean | undefined Specifies the initial value that a user can change.
descriptionOptional string | undefined Descriptive text that will be rendered adjacent to the control’s label.
disabledOptional boolean | undefined Sets whether or not the element should be disabled. Prevents selection.
errorOptional string | undefined Error text that will be rendered below the control.
formOptional string | undefined Specifies the id of the <form> this input belongs to. If omitted, it’s the closest parent form.
hiddenElementsOptional ("label" | "description" | "error")[] | undefined Visually hides the specified elements. The hidden elements will still be present and visible to screen readers.
indeterminateOptional boolean | undefined Sets whether the Checkbox should be rendered as indeterminate (“partially checked”) or not. Note that this is purely visual, and will not change the actual checked state of the Checkbox. If a Checkbox is both indeterminate and checked, it will display as indeterminate.
invalidOptional boolean | undefined Sets whether or not the element is in an invalid state. This is a display-only prop, and will not prevent form submission.
labelOptional React.ReactNode Text that describes the control. Will be both visible and clickable.
nameOptional string | undefined Specifies the name for this input that’s submitted with the form.
onChangeOptional ((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined Required for controlled inputs. Fires immediately when the input’s value is changed by the user (for example, it fires on every keystroke). Behaves like the browser input event.
readOnlyOptional boolean | undefined If true, the input is not editable by the user.
requiredOptional boolean | undefined If true, the value must be provided for the form to submit.
tabIndexOptional number | undefined Overrides the default tab key behavior. Avoid using values other than -1 and 0.
valueOptional string | undefined Controls the input’s text. When you pass this prop, you must also pass an onChange handler that updates the passed value.

You can set a Checkbox component to different states:

  • indeterminate
  • disabled
  • invalid

Indeterminate

The Checkbox component can be in an indeterminate state. This is useful when it represents the aggregated state of some other set of checkboxes, of which some might be checked and some might not. Note that this property is purely visual, and doesn’t affect the Checkbox’s underlying checked state.

Loading example...

const [checked1, setChecked1] = React.useState(false);
const [checked2, setChecked2] = React.useState(true);

const allChecked = checked1 && checked2;

const handleAggregateChange = () => {
 if (checked1 && checked2) {
 setChecked1(false);
 setChecked2(false);
 } else {
 setChecked1(true);
 setChecked2(true);
 }
};

return (
 <Box
 css={{
 stack: 'y',
 }}
 >
 <Checkbox
 label="This Checkbox is aggregating the state of the Checkboxes below it."
 checked={allChecked}
 indeterminate={checked1 !== checked2}
 onChange={handleAggregateChange}
 />
 <Checkbox
 label="Checkbox 1"
 checked={checked1}
 onChange={(e) => {
 setChecked1(e.target.checked);
 }}
 />
 <Checkbox
 label="Checkbox 2"
 checked={checked2}
 onChange={(e) => {
 setChecked2(e.target.checked);
 }}
 />
 </Box>
)

Disabled

Checkbox can be disabled. This prevents changes.

Loading example...

<Checkbox label="This Checkbox is disabled." defaultChecked disabled />
<Checkbox disabled invalid label="This invalid Checkbox is disabled." />

Invalid

You can mark a Checkbox component as invalid. This is a styling-only prop, useful in form validation. It won’t prevent form submission.

Loading example...

<Checkbox label="This Checkbox is in an invalid state." invalid />

State management

Use the Checkbox component as an uncontrolled input:

Loading example...

<Checkbox
 onChange={(e) => {
 console.log(e.target.checked);
 }}
 defaultChecked
 label="This Checkbox is uncontrolled."
/>

See also

Last verified 2026-09-24

Is this helpful?