DevExtreme v24.2 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

React Check Box

When you add the CheckBox component to an application, specify its value property to set its state. The CheckBox can have one of the following states:

  • Checked (value is true).
  • Unchecked (value is false).
  • Indeterminate (value is null or undefined).
DevExtreme Accessibility Compliance
DevExtreme component libraries meet a variety of WCAG and Section 508 compliance standards. To assess this demo’s accessibility level, click the Run AXE® Validation button to launch the AXE® web accessibility evaluation tool.
All trademarks or registered trademarks are property of their respective owners. AXE® Terms of Use
The overall accessibility level of your application depends on the CheckBox features used.
Backend API
import React, { useCallback, useState } from 'react'; import { CheckBox, CheckBoxTypes } from 'devextreme-react/check-box'; const checkedLabel = { 'aria-label': 'Checked' }; const uncheckedLabel = { 'aria-label': 'Unchecked' }; const indeterminateLabel = { 'aria-label': 'Indeterminate' }; const threeStateModeLabel = { 'aria-label': 'Three state mode' }; const handleValueChangeLabel = { 'aria-label': 'Handle value change' }; const disabledLabel = { 'aria-label': 'Disabled' }; const customSizeLabel = { 'aria-label': 'Custom size' }; function App() { const [checkBoxValue, setCheckBoxValue] = useState(null); const onValueChanged = useCallback((args: CheckBoxTypes.ValueChangedEvent) => { setCheckBoxValue(args.value); }, []); return ( <div className="form"> <div className="dx-fieldset"> <div className="dx-field"> <div className="dx-field-label">Checked</div> <div className="dx-field-value"> <CheckBox defaultValue={true} elementAttr={checkedLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Unchecked</div> <div className="dx-field-value"> <CheckBox defaultValue={false} elementAttr={uncheckedLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Indeterminate</div> <div className="dx-field-value"> <CheckBox defaultValue={null} elementAttr={indeterminateLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Three state mode</div> <div className="dx-field-value"> <CheckBox enableThreeStateBehavior={true} defaultValue={null} elementAttr={threeStateModeLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Handle value change</div> <div className="dx-field-value"> <CheckBox value={checkBoxValue} elementAttr={handleValueChangeLabel} onValueChanged={onValueChanged} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Disabled</div> <div className="dx-field-value"> <CheckBox disabled={true} value={checkBoxValue} elementAttr={disabledLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Custom size</div> <div className="dx-field-value"> <CheckBox defaultValue={null} iconSize={30} elementAttr={customSizeLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">With label</div> <div className="dx-field-value"> <CheckBox defaultValue={true} text="Label" /> </div> </div> </div> </div> ); } export default App;
import React, { useCallback, useState } from 'react'; import { CheckBox } from 'devextreme-react/check-box'; const checkedLabel = { 'aria-label': 'Checked' }; const uncheckedLabel = { 'aria-label': 'Unchecked' }; const indeterminateLabel = { 'aria-label': 'Indeterminate' }; const threeStateModeLabel = { 'aria-label': 'Three state mode' }; const handleValueChangeLabel = { 'aria-label': 'Handle value change' }; const disabledLabel = { 'aria-label': 'Disabled' }; const customSizeLabel = { 'aria-label': 'Custom size' }; function App() { const [checkBoxValue, setCheckBoxValue] = useState(null); const onValueChanged = useCallback((args) => { setCheckBoxValue(args.value); }, []); return ( <div className="form"> <div className="dx-fieldset"> <div className="dx-field"> <div className="dx-field-label">Checked</div> <div className="dx-field-value"> <CheckBox defaultValue={true} elementAttr={checkedLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Unchecked</div> <div className="dx-field-value"> <CheckBox defaultValue={false} elementAttr={uncheckedLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Indeterminate</div> <div className="dx-field-value"> <CheckBox defaultValue={null} elementAttr={indeterminateLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Three state mode</div> <div className="dx-field-value"> <CheckBox enableThreeStateBehavior={true} defaultValue={null} elementAttr={threeStateModeLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Handle value change</div> <div className="dx-field-value"> <CheckBox value={checkBoxValue} elementAttr={handleValueChangeLabel} onValueChanged={onValueChanged} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Disabled</div> <div className="dx-field-value"> <CheckBox disabled={true} value={checkBoxValue} elementAttr={disabledLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">Custom size</div> <div className="dx-field-value"> <CheckBox defaultValue={null} iconSize={30} elementAttr={customSizeLabel} /> </div> </div> <div className="dx-field"> <div className="dx-field-label">With label</div> <div className="dx-field-value"> <CheckBox defaultValue={true} text="Label" /> </div> </div> </div> </div> ); } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; ReactDOM.render(<App />, document.getElementById('app'));
window.exports = window.exports || {}; window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, jsx: 'react', }, meta: { 'react': { 'esModule': true, }, 'typescript': { 'exports': 'ts', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, 'openai': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', 'bundles:': '../../../../bundles/', 'externals:': '../../../../bundles/externals/', }, defaultExtension: 'js', map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'react': 'npm:react@17.0.2/umd/react.development.js', 'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign', 'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs', 'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', 'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'devextreme': { defaultExtension: 'js', }, 'devextreme-react': { main: 'index.js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/localization/messages': { format: 'json', defaultExtension: 'json', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.12/inferno/package.json', ], babelOptions: { sourceMaps: false, stage0: true, react: true, }, }; System.config(window.config);
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render(<App />, document.getElementById('app'));
<!DOCTYPE html> <html lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.2.3/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" /> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.tsx"); </script> <link rel="stylesheet" type="text/css" href="styles.css" /> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>

The component supports the three state mode. In this demo, the enableThreeStateBehavior property of the "Three state mode" CheckBox is enabled. You can cycle through the states of this CheckBox in the following order:

Indeterminate → Checked → Unchecked → Indeterminate → ...

Specify the onValueChanged property to handle value changes. In this demo, the value of the "Handle value change" CheckBox is passed to the "Disabled" CheckBox. Click the first CheckBox to see how it affects the second one.

You can use the iconSize property to specify custom dimensions for the CheckBox. To add a label to the CheckBox, specify the text property.