If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React, { useCallback, useState } from 'react';
import RadioGroup, { RadioGroupTypes } from 'devextreme-react/radio-group';
import { priorities, priorityEntities, tasks } from './data.ts';
const renderCustomItem = (data) => <div>{data}</div>;
function App() {
const [colorPriority, setColorPriority] = useState(priorities[2]);
const [selectionPriority, setSelectionPriority] = useState(priorityEntities[0].id);
const changeColorPriority = useCallback((e: RadioGroupTypes.ValueChangedEvent) => {
setColorPriority(e.value);
}, [setColorPriority]);
const changeSelectionPriority = useCallback((e: RadioGroupTypes.ValueChangedEvent) => {
setSelectionPriority(e.value);
}, [setSelectionPriority]);
return (
<div className="form">
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value">
<RadioGroup items={priorities} defaultValue={priorities[0]} />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<RadioGroup items={priorities} defaultValue={priorities[1]} disabled={true} />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Horizontal layout</div>
<div className="dx-field-value">
<RadioGroup items={priorities} defaultValue={priorities[0]} layout="horizontal" />
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Custom item template</div>
<div className="dx-field-value">
<RadioGroup
className={colorPriority.toLowerCase()}
items={priorities}
value={colorPriority}
itemRender={renderCustomItem}
onValueChanged={changeColorPriority}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Event handling</div>
<div className="dx-field-value">
<RadioGroup
id="radio-group-with-selection"
items={priorityEntities}
value={selectionPriority}
valueExpr="id"
displayExpr="text"
onValueChanged={changeSelectionPriority}
/>
</div>
</div>
</div>
<div id="tasks-list">
Tasks by selected priority:
<ul id="list">
{tasks
.filter((task) => task.priority === selectionPriority)
.map((task) => (
<li key={task.id}>{task.subject}</li>
))}
</ul>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React, { useCallback, useState } from 'react';
import RadioGroup from 'devextreme-react/radio-group';
import { priorities, priorityEntities, tasks } from './data.js';
const renderCustomItem = (data) => <div>{data}</div>;
function App() {
const [colorPriority, setColorPriority] = useState(priorities[2]);
const [selectionPriority, setSelectionPriority] = useState(priorityEntities[0].id);
const changeColorPriority = useCallback(
(e) => {
setColorPriority(e.value);
},
[setColorPriority],
);
const changeSelectionPriority = useCallback(
(e) => {
setSelectionPriority(e.value);
},
[setSelectionPriority],
);
return (
<div className="form">
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value">
<RadioGroup
items={priorities}
defaultValue={priorities[0]}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<RadioGroup
items={priorities}
defaultValue={priorities[1]}
disabled={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Horizontal layout</div>
<div className="dx-field-value">
<RadioGroup
items={priorities}
defaultValue={priorities[0]}
layout="horizontal"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Custom item template</div>
<div className="dx-field-value">
<RadioGroup
className={colorPriority.toLowerCase()}
items={priorities}
value={colorPriority}
itemRender={renderCustomItem}
onValueChanged={changeColorPriority}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Event handling</div>
<div className="dx-field-value">
<RadioGroup
id="radio-group-with-selection"
items={priorityEntities}
value={selectionPriority}
valueExpr="id"
displayExpr="text"
onValueChanged={changeSelectionPriority}
/>
</div>
</div>
</div>
<div id="tasks-list">
Tasks by selected priority:
<ul id="list">
{tasks
.filter((task) => task.priority === selectionPriority)
.map((task) => (
<li key={task.id}>{task.subject}</li>
))}
</ul>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import themes from 'devextreme/ui/themes';
import App from './App.tsx';
themes.initialized(() => {
ReactDOM.render(
<App />,
document.getElementById('app'),
);
});
xxxxxxxxxx
export const priorities = ['Low', 'Normal', 'Urgent', 'High'];
export const priorityEntities = [
{ id: 0, text: 'Low' },
{ id: 1, text: 'Normal' },
{ id: 2, text: 'Urgent' },
{ id: 3, text: 'High' },
];
export const tasks = [{
id: 0,
subject: 'Choose between PPO and HMO Health Plan',
priority: 3,
}, {
id: 1,
subject: 'Non-Compete Agreements',
priority: 0,
}, {
id: 2,
subject: 'Comment on Revenue Projections',
priority: 1,
}, {
id: 3,
subject: 'Sign Updated NDA',
priority: 2,
}, {
id: 4,
subject: 'Submit Questions Regarding New NDA',
priority: 3,
}, {
id: 5,
subject: 'Rollout of New Website and Marketing Brochures',
priority: 3,
}];
xxxxxxxxxx
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);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import themes from 'devextreme/ui/themes';
import App from './App.js';
themes.initialized(() => {
ReactDOM.render(<App />, document.getElementById('app'));
});
xxxxxxxxxx
export const priorities = ['Low', 'Normal', 'Urgent', 'High'];
export const priorityEntities = [
{ id: 0, text: 'Low' },
{ id: 1, text: 'Normal' },
{ id: 2, text: 'Urgent' },
{ id: 3, text: 'High' },
];
export const tasks = [
{
id: 0,
subject: 'Choose between PPO and HMO Health Plan',
priority: 3,
},
{
id: 1,
subject: 'Non-Compete Agreements',
priority: 0,
},
{
id: 2,
subject: 'Comment on Revenue Projections',
priority: 1,
},
{
id: 3,
subject: 'Sign Updated NDA',
priority: 2,
},
{
id: 4,
subject: 'Submit Questions Regarding New NDA',
priority: 3,
},
{
id: 5,
subject: 'Rollout of New Website and Marketing Brochures',
priority: 3,
},
];
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.low .dx-radiobutton-checked .dx-radiobutton-icon .dx-radiobutton-icon-dot {
background: gray;
}
.normal .dx-radiobutton-checked .dx-radiobutton-icon .dx-radiobutton-icon-dot {
background: green;
}
.urgent .dx-radiobutton-checked .dx-radiobutton-icon .dx-radiobutton-icon-dot {
background: orange;
}
.high .dx-radiobutton-checked .dx-radiobutton-icon .dx-radiobutton-icon-dot {
background: red;
}
#radio-group-with-selection {
margin-bottom: 10px;
}
#tasks-list {
margin: 0 0 10px 10px;
white-space: normal;
}
#list {
margin: 10px 0 0 20px;
padding-left: 0;
text-align: left;
}
Bind RadioGroup to Data
You can display RadioGroup items from the items array or a dataSource. If your data is an array of objects, use the displayExpr and valueExpr properties. displayExpr specifies a data source field that contains button captions. valueExpr specifies a data source field that supplies values to the value property when users select a button. Leave valueExpr unspecified if you need to supply the entire data object to the value property.
Configure the Layout
The RadioGroup supports horizontal (default for tablets) and vertical (default for other devices) layouts. To change the layout for all device types, specify the layout property.
Customize the Item Appearance
Define the itemTemplate to customize the item appearance. To customize an individual item, specify its template property.
Handle the Value Change Event
You can set the value property to one of the data source items to specify a predefined selection. Implement the onValueChanged function to handle value changes.