Your search did not match any results.
Tab Panel

Tab Panel

Documentation

The TabPanel is a widget consisting of the Tabs and the MultiView widgets. It automatically synchronizes the selected tab with the currently displayed view and vice versa. In this demo, the appearance of views and tabs is defined by custom templates.

Copy to CodeSandBox
Apply
Reset
import React from 'react'; import CheckBox from 'devextreme-react/check-box'; import TabPanel from 'devextreme-react/tab-panel'; import { multiViewItems as companies } from './data.js'; import CompanyItem from './CompanyItem.js'; class App extends React.Component { constructor() { super(); this.state = { animationEnabled: true, swipeEnabled: true, loop: false, selectedIndex: 0 }; this.onSelectionChanged = this.onSelectionChanged.bind(this); this.onLoopChanged = this.onLoopChanged.bind(this); this.onAnimationEnabledChanged = this.onAnimationEnabledChanged.bind(this); this.onSwipeEnabledChanged = this.onSwipeEnabledChanged.bind(this); } render() { const { animationEnabled, loop, selectedIndex, swipeEnabled } = this.state; return ( <div> <TabPanel height={260} dataSource={companies} selectedIndex={selectedIndex} onOptionChanged={this.onSelectionChanged} loop={loop} itemTitleRender={this.itemTitleRender} itemComponent={CompanyItem} animationEnabled={animationEnabled} swipeEnabled={swipeEnabled} /> <div className={'item-box'}> Item <span>{ selectedIndex + 1 }</span> of <span>{ companies.length }</span> </div> <div className={'options'}> <div className={'caption'}>Options</div> <div className={'option'}> <CheckBox value={loop} onValueChanged={this.onLoopChanged} text={'Loop enabled'} /> </div> <div className={'option'}> <CheckBox value={ animationEnabled } onValueChanged={this.onAnimationEnabledChanged} text={'Animation enabled'} /> </div> <div className={'option'}> <CheckBox value={ swipeEnabled } onValueChanged={this.onSwipeEnabledChanged} text={'Swipe enabled'} /> </div> </div> </div> ); } itemTitleRender(company) { return <span>{company.CompanyName}</span>; } onSelectionChanged(args) { if(args.name == 'selectedIndex') { this.setState({ selectedIndex: args.value }); } } onLoopChanged(args) { this.setState({ loop: args.value }); } onAnimationEnabledChanged(args) { this.setState({ animationEnabled: args.value }); } onSwipeEnabledChanged(args) { this.setState({ swipeEnabled: args.value }); } } export default App;
import React from 'react'; class CompanyItem extends React.PureComponent { render() { const company = this.props.data; return ( <div> <div className={'tabpanel-item'}> <div> <p> <b>{ company.City } </b> (<span>{ company.State }</span>) </p> <p> <span>{ company.Zipcode } </span> <span>{ company.Address }</span> </p> </div> <div> <p> Phone: <b>{ company.Phone }</b> </p> <p> Fax: <b>{ company.Fax }</b> </p> <p> Website: <a href={company.Website} target={'_blank'}> { company.Website } </a> </p> </div> </div> </div> ); } } export default CompanyItem;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render( <App />, document.getElementById('app') );
<!DOCTYPE html> <html> <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=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.7/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.7/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="https://unpkg.com/core-js@2.4.1/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.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
.tabpanel-item { height: 200px; user-select: none; padding-left: 25px; padding-top: 55px; } .mobile .tabpanel-item { padding-top: 10px; } .tabpanel-item > div { float: left; padding: 0 85px 10px 10px } .tabpanel-item p { font-size: 16px; margin: 0; } .item-box { font-size: 16px; margin: 15px 0 45px 10px; } .options { padding: 20px; background-color: rgba(191, 191, 191, 0.15); margin-top: 20px; } .caption { font-size: 18px; font-weight: 500; } .option { margin-top: 10px; }
export const multiViewItems = [{ 'ID': 1, 'CompanyName': 'SuprMart', 'Address': '702 SW 8th Street', 'City': 'Bentonville', 'State': 'Arkansas', 'Zipcode': 72716, 'Phone': '(800) 555-2797', 'Fax': '(800) 555-2171', 'Website': 'http://www.nowebsitesupermart.com' }, { 'ID': 2, 'CompanyName': "El'Depot", 'Address': '2455 Paces Ferry Road NW', 'City': 'Atlanta', 'State': 'Georgia', 'Zipcode': 30339, 'Phone': '(800) 595-3232', 'Fax': '(800) 595-3231', 'Website': 'http://www.nowebsitedepot.com' }, { 'ID': 3, 'CompanyName': 'K&S Music', 'Address': '1000 Nicllet Mall', 'City': 'Minneapolis', 'State': 'Minnesota', 'Zipcode': 55403, 'Phone': '(612) 304-6073', 'Fax': '(612) 304-6074', 'Website': 'http://www.nowebsitemusic.com' }, { 'ID': 4, 'CompanyName': 'Tom Club', 'Address': '999 Lake Drive', 'City': 'Issaquah', 'State': 'Washington', 'Zipcode': 98027, 'Phone': '(800) 955-2292', 'Fax': '(800) 955-2293', 'Website': 'http://www.nowebsitetomsclub.com' }];
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, defaultExtension: 'js', map: { 'react': 'npm:react@16/umd/react.development.js', 'react-dom': 'npm:react-dom@16/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'devextreme': 'npm:devextreme@19.1', 'devextreme-react': 'npm:devextreme-react@19.1', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.7/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, packages: { 'devextreme': { defaultExtension: 'js' }, 'devextreme-react': { main: 'index.js' } }, babelOptions: { sourceMaps: false, stage0: true, react: true } });