DevExtreme v26.1 is now available.

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

Your search did not match any results.

React Gauges - Circular Gauge

This demo illustrates how to bind an array of subvalues to the CircularGauge. Since an array can not be bound to a field as a regular value, it is bound as a computed one.

Backend API
import React, { useCallback, useState } from 'react'; import { CircularGauge, Scale, Label, RangeContainer, Range, Tooltip, Title, Font, } from 'devextreme-react/circular-gauge'; import { SelectBox } from 'devextreme-react/select-box'; import { dataSource, seasonLabel } from './data.ts'; function customizeText({ valueText }: { valueText: string }): string { return `${valueText} °C`; } function App() { const [value, setValue] = useState(dataSource[0].mean); const [subvalues, setSubvalues] = useState([dataSource[0].min, dataSource[0].max]); const onSelectionChanged = useCallback(({ selectedItem }) => { setValue(selectedItem.mean); setSubvalues([selectedItem.min, selectedItem.max]); }, [setValue, setSubvalues]); return ( <div id="gauge-demo"> <CircularGauge id="gauge" value={value} subvalues={subvalues} > <Scale startValue={10} endValue={40} tickInterval={5}> <Label customizeText={customizeText} /> </Scale> <RangeContainer> <Range startValue={10} endValue={20} color="#0077BE" /> <Range startValue={20} endValue={30} color="#E6E200" /> <Range startValue={30} endValue={40} color="#77DD77" /> </RangeContainer> <Tooltip enabled={true} /> <Title text="Temperature in the Greenhouse"> <Font size={28} /> </Title> </CircularGauge> <SelectBox id="seasons" width={150} inputAttr={seasonLabel} dataSource={dataSource} defaultValue={dataSource[0]} displayExpr="name" onSelectionChanged={onSelectionChanged} /> </div> ); } export default App;
import React, { useCallback, useState } from 'react'; import { CircularGauge, Scale, Label, RangeContainer, Range, Tooltip, Title, Font, } from 'devextreme-react/circular-gauge'; import { SelectBox } from 'devextreme-react/select-box'; import { dataSource, seasonLabel } from './data.js'; function customizeText({ valueText }) { return `${valueText} °C`; } function App() { const [value, setValue] = useState(dataSource[0].mean); const [subvalues, setSubvalues] = useState([dataSource[0].min, dataSource[0].max]); const onSelectionChanged = useCallback( ({ selectedItem }) => { setValue(selectedItem.mean); setSubvalues([selectedItem.min, selectedItem.max]); }, [setValue, setSubvalues], ); return ( <div id="gauge-demo"> <CircularGauge id="gauge" value={value} subvalues={subvalues} > <Scale startValue={10} endValue={40} tickInterval={5} > <Label customizeText={customizeText} /> </Scale> <RangeContainer> <Range startValue={10} endValue={20} color="#0077BE" /> <Range startValue={20} endValue={30} color="#E6E200" /> <Range startValue={30} endValue={40} color="#77DD77" /> </RangeContainer> <Tooltip enabled={true} /> <Title text="Temperature in the Greenhouse"> <Font size={28} /> </Title> </CircularGauge> <SelectBox id="seasons" width={150} inputAttr={seasonLabel} dataSource={dataSource} defaultValue={dataSource[0]} displayExpr="name" onSelectionChanged={onSelectionChanged} /> </div> ); } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; ReactDOM.render( <App />, document.getElementById('app'), );
export const dataSource = [{ name: 'Summer', mean: 35, min: 28, max: 38, }, { name: 'Autumn', mean: 24, min: 20, max: 32, }, { name: 'Winter', mean: 18, min: 16, max: 23, }, { name: 'Spring', mean: 27, min: 18, max: 31, }]; export const seasonLabel = { 'aria-label': 'Season' };
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render(<App />, document.getElementById('app'));
export const dataSource = [ { name: 'Summer', mean: 35, min: 28, max: 38, }, { name: 'Autumn', mean: 24, min: 20, max: 32, }, { name: 'Winter', mean: 18, min: 16, max: 23, }, { name: 'Spring', mean: 27, min: 18, max: 31, }, ]; export const seasonLabel = { 'aria-label': 'Season' };
<!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/26.1.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="./bundle.css" /> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> <script src="bundles/vendor/react.vendor.js"></script> <script src="./bundle.js"></script> </body> </html>
#gauge-demo { height: 440px; width: 100%; } #gauge { width: 80%; height: 100%; float: left; } #seasons { width: 20%; float: left; text-align: left; margin-top: 20px; }