Multiple cascading in React Drop down list component

15 Mar 202424 minutes to read

The following example demonstrate about how to preselect the list items in multiple cascading DropDownList.

[Class-component]

import { Query } from '@syncfusion/ej2-data';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
export default class App extends React.Component {
    // country DropDownList instance
    countryObj;
    // state DropDownList instance
    stateObj;
    // city DropDownList instance
    cityObj;
    // define the country DropDownList data
    countryData = [
        { CountryName: 'Australia', CountryId: '2' },
        { CountryName: 'United States', CountryId: '1' }
    ];
    // define the state DropDownList data
    stateData = [
        { StateName: 'New York', CountryId: '1', StateId: '101' },
        { StateName: 'Virginia ', CountryId: '1', StateId: '102' },
        { StateName: 'Tasmania ', CountryId: '2', StateId: '105' }
    ];
    // define the city DropDownList data
    cityData = [
        { CityName: 'Albany', StateId: '101', CityId: 201 },
        { CityName: 'Beacon ', StateId: '101', CityId: 202 },
        { CityName: 'Emporia', StateId: '102', CityId: 206 },
        { CityName: 'Hampton ', StateId: '102', CityId: 205 },
        { CityName: 'Hobart', StateId: '105', CityId: 213 },
        { CityName: 'Launceston ', StateId: '105', CityId: 214 }
    ];
    // maps the country column to fields property
    countryField = { value: 'CountryId', text: 'CountryName' };
    // maps the state column to fields property
    stateField = { value: 'StateId', text: 'StateName' };
    // maps the city column to fields property
    cityField = { text: 'CityName', value: 'CityId' };
    // Index no of the country dropdownlist
    index = 1;
    constructor(props) {
        super(props);
        this.onCountryChange = this.onCountryChange.bind(this);
        this.onStateChange = this.onStateChange.bind(this);
    }
    onCountryChange() {
        // query the data source based on country DropDownList selected value
        this.stateObj.query = new Query().where('CountryId', 'equal', this.countryObj.value);
        // enable the state DropDownList
        this.stateObj.enabled = true;
        // clear the existing selection.
        this.stateObj.text = null;
        // bind the property changes to state DropDownList
        this.stateObj.dataBind();
        // clear the existing selection in city DropDownList
        this.cityObj.text = null;
        // disable the city DropDownList
        this.cityObj.enabled = false;
        // bind the property change to City DropDownList
        this.cityObj.dataBind();
    }
    onStateChange() {
        // query the data source based on state DropDownList selected value
        this.cityObj.query = new Query().where('StateId', 'equal', this.stateObj.value);
        // enable the city DropDownList
        this.cityObj.enabled = true;
        // clear the existing selection
        this.cityObj.text = null;
        // bind the property change to city DropDownList
        this.cityObj.dataBind();
    }
    componentDidMount() {
        this.onCountryChange();
        // preselect an item from filtered state DropDownList
        this.stateObj.index = 0;
        this.stateObj.dataBind();
        // initally change event not triggered, so manually call the corresponding function
        this.onStateChange();
        // preselect an item from filtered city DropDownList
        this.cityObj.index = 0;
        this.cityObj.dataBind();
    }
    render() {
        return (<div>
        {/* specifies the tag for render the country DropDownList component */}
        <DropDownListComponent id="country-ddl" ref={(scope) => { this.countryObj = scope; }} index={this.index} fields={this.countryField} dataSource={this.countryData} placeholder='Select a country' change={this.onCountryChange}/>
        <br />

        {/* specifies the tag for render the state DropDownList component */}
        <DropDownListComponent id="state-ddl" ref={(scope) => { this.stateObj = scope; }} enabled={false} fields={this.stateField} dataSource={this.stateData} placeholder='Select a state' change={this.onStateChange}/>
        <br />

        {/* specifies the tag for render the city DropDownList component */}
        <DropDownListComponent id="city-ddl" ref={(scope) => { this.cityObj = scope; }} enabled={false} fields={this.cityField} dataSource={this.cityData} placeholder='Select a city'/>
      </div>);
    }
}
ReactDOM.render(<App />, document.getElementById('sample'));
import { Query } from '@syncfusion/ej2-data';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import * as ReactDOM from 'react-dom';

export default class App extends React.Component<{}, {}> {

  // country DropDownList instance
  private countryObj: any;

  // state DropDownList instance
  private stateObj: any;

  // city DropDownList instance
  private cityObj: any;

  // define the country DropDownList data
  private countryData: { [key: string]: Object }[] = [
    { CountryName: 'Australia', CountryId: '2' },
    { CountryName: 'United States', CountryId: '1' }
  ];

  // define the state DropDownList data
  private stateData: { [key: string]: Object }[] = [
    { StateName: 'New York', CountryId: '1', StateId: '101' },
    { StateName: 'Virginia ', CountryId: '1', StateId: '102' },
    { StateName: 'Tasmania ', CountryId: '2', StateId: '105' }
  ];

  // define the city DropDownList data
  private cityData: { [key: string]: Object }[] = [
    { CityName: 'Albany', StateId: '101', CityId: 201 },
    { CityName: 'Beacon ', StateId: '101', CityId: 202 },
    { CityName: 'Emporia', StateId: '102', CityId: 206 },
    { CityName: 'Hampton ', StateId: '102', CityId: 205 },
    { CityName: 'Hobart', StateId: '105', CityId: 213 },
    { CityName: 'Launceston ', StateId: '105', CityId: 214 }
  ];

  // maps the country column to fields property
  private countryField: object = { value: 'CountryId', text: 'CountryName' };

  // maps the state column to fields property
  private stateField: object = { value: 'StateId', text: 'StateName' };

  // maps the city column to fields property
  private cityField: object = { text: 'CityName', value: 'CityId' };

  // Index no of the country dropdownlist
  private index: number = 1;

  constructor(props: any) {
    super(props);
    this.onCountryChange = this.onCountryChange.bind(this);
    this.onStateChange = this.onStateChange.bind(this);
  }

  public onCountryChange() {
    // query the data source based on country DropDownList selected value
    this.stateObj.query = new Query().where('CountryId', 'equal', this.countryObj.value);
    // enable the state DropDownList
    this.stateObj.enabled = true;
    // clear the existing selection.
    this.stateObj.text = null;
    // bind the property changes to state DropDownList
    this.stateObj.dataBind();
    // clear the existing selection in city DropDownList
    this.cityObj.text = null;
    // disable the city DropDownList
    this.cityObj.enabled = false;
    // bind the property change to City DropDownList
    this.cityObj.dataBind();
  }
  public onStateChange() {
    // query the data source based on state DropDownList selected value
    this.cityObj.query = new Query().where('StateId', 'equal', this.stateObj.value);
    // enable the city DropDownList
    this.cityObj.enabled = true;
    // clear the existing selection
    this.cityObj.text = null;
    // bind the property change to city DropDownList
    this.cityObj.dataBind();
  }
  public componentDidMount() {
    this.onCountryChange();
    // preselect an item from filtered state DropDownList
    this.stateObj.index = 0;
    this.stateObj.dataBind();
    // initally change event not triggered, so manually call the corresponding function
    this.onStateChange();
    // preselect an item from filtered city DropDownList
    this.cityObj.index = 0;
    this.cityObj.dataBind();
  }
  public render() {
    return (
      <div>
        {/* specifies the tag for render the country DropDownList component */}
        <DropDownListComponent id="country-ddl" ref={(scope) => { this.countryObj = scope; }} index={this.index} fields={this.countryField} dataSource={this.countryData} placeholder='Select a country' change={this.onCountryChange} />
        <br />

        {/* specifies the tag for render the state DropDownList component */}
        <DropDownListComponent id="state-ddl" ref={(scope) => { this.stateObj = scope; }} enabled={false} fields={this.stateField} dataSource={this.stateData} placeholder='Select a state' change={this.onStateChange} />
        <br />

        {/* specifies the tag for render the city DropDownList component */}
        <DropDownListComponent id="city-ddl" ref={(scope) => { this.cityObj = scope; }} enabled={false} fields={this.cityField} dataSource={this.cityData} placeholder='Select a city' />
      </div>
    );
  }
}
ReactDOM.render(<App />, document.getElementById('sample'));

[Functional-component]

import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { useState, useRef } from 'react';
import { Query } from '@syncfusion/ej2-data';

function App() {
      // state DropDownList instance
  const stateObj = useRef(null);
  // city DropDownList instance
  const cityObj = useRef(null);
  //define the country DropDownList data
  const countryData = [
    { CountryName: 'Australia', CountryId: '2' },
    { CountryName: 'United States', CountryId: '1' }
    ];
  //define the state DropDownList data
  const stateData = [
    { StateName: 'New York', CountryId: '1', StateId: '101' },
    { StateName: 'Virginia ', CountryId: '1', StateId: '102' },
    { StateName: 'Tasmania ', CountryId: '2', StateId: '105' }
  ];
  //define the city DropDownList data
  const cityData = [
    { CityName: 'Albany', StateId: '101', CityId: 201 },
    { CityName: 'Beacon ', StateId: '101', CityId: 202 },
    { CityName: 'Emporia', StateId: '102', CityId: 206 },
    { CityName: 'Hampton ', StateId: '102', CityId: 205 },
    { CityName: 'Hobart', StateId: '105', CityId: 213 },
    { CityName: 'Launceston ', StateId: '105', CityId: 214 }
  ];
  // maps the country column to fields property
  const countryFields = { value: 'CountryId', text: 'CountryName' };
  // maps the state column to fields property
  const stateFields = { value: 'StateId', text: 'StateName' };
  // maps the city column to fields property
  const cityFields = { text: 'CityName', value: 'CityId' };
  const [stateQuery, setStateQuery] = useState(null);
  const [stateText, setStateText] = useState(null);
  const [cityText, setCityText] = useState(null);
  const [cityQuery, setCityQuery] = useState(null);
  const countryChange = (args) => {
    // query the data source based on country DropDownList selected value
    let tempQuery = new Query().where('CountryId', 'equal', args.value);
    setStateQuery(tempQuery);
    // clear the existing selection.
    setStateText(null);
    // bind the property changes to state DropDownList
    stateObj.current.dataBind();
    // clear the existing selection.
    setCityText(null);
    // bind the property changes to city DropDownList
    cityObj.current.dataBind();
  };
  const stateChange = (args) => {
    // query the data source based on state DropDownList selected value
    let tempQuery1 = new Query().where('StateId', 'equal', args.value);
    setCityQuery(tempQuery1);
    // clear the existing selection.
    setCityText(null);
  };
    return (
      <div id="cascade">
        <div style=>
          <DropDownListComponent
            id="country"
            dataSource={countryData}
            fields={countryFields}
            popupHeight="auto"
            change={countryChange.bind(this)}
            placeholder="Select a country"
          />
        </div>
        <div style=>
          <DropDownListComponent
            id="state"
            dataSource={stateData}
            ref={stateObj}
            fields={stateFields}
            popupHeight="auto"
            change={stateChange.bind(this)}
            placeholder="Select a state"
            query={stateQuery}
            text={stateText}
          />
        </div>
        <div style=>
          <DropDownListComponent
            id="city"
            dataSource={cityData}
            ref={cityObj}
            fields={cityFields}
            popupHeight="auto"
            placeholder="Select a city"
            text={cityText}
            query={cityQuery}
          />
        </div>
      </div>
    );
}
ReactDOM.render(<App />, document.getElementById('sample'));
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { useState, useRef } from 'react';
import { Query } from '@syncfusion/ej2-data';

function App() {
      // state DropDownList instance
  const stateObj = useRef(null);
  // city DropDownList instance
  const cityObj = useRef(null);
  const tempCountry = 'country';
  //define the country DropDownList data
  const countryData = [
    { CountryName: 'Australia', CountryId: '2' },
    { CountryName: 'United States', CountryId: '1' }
    ];
  const tempState = 'state';
  //define the state DropDownList data
  const stateData = [
    { StateName: 'New York', CountryId: '1', StateId: '101' },
    { StateName: 'Virginia ', CountryId: '1', StateId: '102' },
    { StateName: 'Tasmania ', CountryId: '2', StateId: '105' }
  ];
  const tempCity = 'cities';
  //define the city DropDownList data
  const cityData = [
    { CityName: 'Albany', StateId: '101', CityId: 201 },
    { CityName: 'Beacon ', StateId: '101', CityId: 202 },
    { CityName: 'Emporia', StateId: '102', CityId: 206 },
    { CityName: 'Hampton ', StateId: '102', CityId: 205 },
    { CityName: 'Hobart', StateId: '105', CityId: 213 },
    { CityName: 'Launceston ', StateId: '105', CityId: 214 }
  ];
  // maps the country column to fields property
  const countryFields = { value: 'CountryId', text: 'CountryName' };
  // maps the state column to fields property
  const stateFields = { value: 'StateId', text: 'StateName' };
  // maps the city column to fields property
  const cityFields = { text: 'CityName', value: 'CityId' };
  const [stateQuery, setStateQuery] = useState(null);
  const [stateText, setStateText] = useState(null);
  const [cityText, setCityText] = useState(null);
  const [cityQuery, setCityQuery] = useState(null);
  const countryChange = (args) => {
    // query the data source based on country DropDownList selected value
    let tempQuery = new Query().where('CountryId', 'equal', args.value);
    setStateQuery(tempQuery);
    // clear the existing selection.
    setStateText(null);
    // bind the property changes to state DropDownList
    stateObj.current.dataBind();
    // clear the existing selection.
    setCityText(null);
    // bind the property changes to city DropDownList
    cityObj.current.dataBind();
  };
  const stateChange = (args) => {
    // query the data source based on state DropDownList selected value
    let tempQuery1 = new Query().where('StateId', 'equal', args.value);
    setCityQuery(tempQuery1);
    // clear the existing selection.
    setCityText(null);
  };
    return (
      <div id="cascade">
        <div style=>
          <DropDownListComponent
            id="country"
            dataSource={countryData}
            fields={countryFields}
            popupHeight="auto"
            change={countryChange.bind(this)}
            placeholder="Select a country"
          />
        </div>
        <div style=>
          <DropDownListComponent
            id="state"
            dataSource={stateData}
            ref={stateObj}
            fields={stateFields}
            popupHeight="auto"
            change={stateChange.bind(this)}
            placeholder="Select a state"
            query={stateQuery}
            text={stateText}
          />
        </div>
        <div style=>
          <DropDownListComponent
            id="city"
            dataSource={cityData}
            ref={cityObj}
            fields={cityFields}
            popupHeight="auto"
            placeholder="Select a city"
            text={cityText}
            query={cityQuery}
          />
        </div>
      </div>
    );
}
ReactDOM.render(<App />, document.getElementById('sample'));