rmwc
Version:
A thin React wrapper for Material Design (Web) Components
176 lines (149 loc) • 3.39 kB
Markdown
> Menus display a list of choices on a transient sheet of material.
import from **rmwc/Select**
[](https://material.io/components/web/catalog/input-controls/select-menus/)
Selects come in three different styles: standard, box, and outlined.
```jsx render
<Select
label="Standard"
placeholder=""
options={['Cookies', 'Pizza', 'Icecream']}
/>
<Select
label="Boxed"
box
placeholder=""
options={['Cookies', 'Pizza', 'Icecream']}
/>
<Select
label="Outlined"
outlined
placeholder=""
options={['Cookies', 'Pizza', 'Icecream']}
/>
```
To fit common use cases, RMWC Select provides a data driven method for rendering select menus. There are multiple formats you can pass data in, use the one that best fits your requirements. To make your label not float by default and to have an unselected blank value, set the `placeholder` prop to a blank string.
```jsx render
import { Select } from 'rmwc/Select';
{/*
A controlled select
Using a formatted array of options
[
{label: string, value: string, ...props},
{label: string, value: string, ...props}
]
*/}
<Select
value={this.state.value}
onChange={evt => this.setState({value: evt.target.value})}
label="Array"
placeholder=""
options={[
{
label: 'Cookies',
value: '1'
},
{
label: 'Pizza',
value: '2',
/** Any additional items will be passed to the
child ListItem as props */
'aria-disabled': true,
'tabIndex': -1
},
{
label: 'Icecream',
value: '3'
}
]}
/>
{/*
An uncontrolled select
A simple value => label map */
}
<Select
label="Object map"
options={{'1': 'Cookies', '2': 'Pizza', '3': 'Icecream'}}
/>
{/* a simple array of options with box styling, value will be the same as label */}
<Select
label="Simple Array"
placeholder="-- Select One --"
options={['Cookies', 'Pizza', 'Icecream']}
/>
```
If you want full control over the child `ListItems`, you can manually build the list yourself.
```jsx render
import { Select } from 'rmwc/Select';
<Select
label="Manual"
defaultValue=""
>
<option value="" disabled></option>
<option value="Cookies">
Cookies
</option>
<option value="Pizza">
Pizza
</option>
<option value="Icecream">
Icecream
</option>
</Select>
```
You can build a select with optgroup.
```jsx render
import { Select } from 'rmwc/Select';
<Select
label="Formatted"
options={[
{
label: 'Dinner',
options: [
{
label: 'Pizza',
value: '2',
}
]
},
{
label: 'Dessert',
options: [
{
label: 'Cookies',
value: '1'
},
{
label: 'Icecream',
value: '3'
}
]
}
]}
/>
<Select
label="Manually Built"
>
<optgroup label="Dinner">
<option value="Pizza">
Pizza
</option>
</optgroup>
<optgroup label="Dessert">
<option value="Cookies">
Cookies
</option>
<option value="Icecream">
Icecream
</option>
</optgroup>
</Select>
```
```jsx renderOnly
import { DocumentComponent } from 'rmwc/Base/utils/DocumentComponent';
<DocumentComponent displayName="Select" />
```