Data and Value Binding

The MultiSelect enables you to configure its predefined list of options and selected values.

To set the predefined option list, use the data property. To set the selected values, use the value property.

Data Binding

To bind the MultiSelect to data, use the data property of the component.

The data property accepts both:

Arrays of Primitive Values

The following example demonstrates how to bind the MultiSelect to an array of primitive values.

import React from 'react';
import ReactDOM from 'react-dom';
import { MultiSelect } from '@progress/kendo-react-dropdowns';

const sizes = [ "X-Small", "Small", "Medium", "Large", "X-Large", "2X-Large" ];

class AppComponent extends React.Component {
    state = { value: [] };

    handleChange = (event) => {
        this.setState({
            value: event.target.value
        });
    }

    render() {
        return (
            <div>
                <div>T-shirt sizes:</div>
                <MultiSelect
                    data={sizes}
                    value={this.state.value}
                    onChange={this.handleChange}
                />
            </div>
        );
    }
}

ReactDOM.render(
    <AppComponent />,
    document.querySelector('my-app')
);

Datasets of Objects

If the MultiSelect is bound to a dataset of objects, the textField property needs to be set and the value of the component will be an array of the selected objects.

By default, the MultiSelect compares the items by reference. To specify a field from the data object which will be used for the comparison, utilize the dataItemKey property. The dataItemKey property is useful when the references to the selected items which are configured in the value or defaultValue property do not match their corresponding items from the data collection. If dataItemKey is not set and the references in data and value do not correspond, the selected items will not be highlighted in the drop-down list.

import React from 'react';
import ReactDOM from 'react-dom';
import { MultiSelect } from '@progress/kendo-react-dropdowns';

const sports = [
    { text: 'Basketball', id: 1 },
    { text: 'Football', id: 2 },
    { text: 'Tennis', id: 3 },
    { text: 'Volleyball', id: 4 }
];

class AppComponent extends React.Component {
    state = {
        // Since the items references of the initial value are not from the 'sports' collection,
        // 'dataItemKey' have to be set.
        value: [
            { text: 'Football', id: 2 },
            { text: 'Tennis', id: 3 }
        ]
    };

    handleChange = (event) => {
        this.setState({
            value: event.target.value
        });
    }

    render() {
        return (
            <div>
                <div className="example-config">
                    Selected Values: {JSON.stringify(this.state.value)}
                </div>
                <MultiSelect
                    data={sports}
                    onChange={this.handleChange}
                    value={this.state.value}
                    textField="text"
                    dataItemKey="id"
                />
            </div>
        );
    }
}

ReactDOM.render(
    <AppComponent />,
    document.querySelector('my-app')
);

Value Binding

To render the selected values, use the value property of the MultiSelect. If you set the value through the value property, hook up to the onChange event and manually update the value of the value property.

import React from 'react';
import ReactDOM from 'react-dom';
import { MultiSelect } from '@progress/kendo-react-dropdowns';

const sizes = [ "X-Small", "Small", "Medium", "Large", "X-Large", "2X-Large" ];

class AppComponent extends React.Component {
    state = { value: [] };

    handleChange = (event) => {
        this.setState({
            value: event.target.value
        });
    }

    render() {
        return (
            <div>
                <div>T-shirt sizes:</div>
                <MultiSelect
                    data={sizes}
                    value={this.state.value}
                    onChange={this.handleChange}
                />
            </div>
        );
    }
}

ReactDOM.render(
    <AppComponent />,
    document.querySelector('my-app')
);
 /