Seleção
Os componentes de seleção são usados para coletar informações fornecidas pelo usuário em uma lista de opções.
Seleção Simples
Os menus são posicionados sobre seus elementos emissores, de modo que o item de menu atualmente selecionado apareça na parte superior do elemento emissor.
<FormControl fullWidth>
<InputLabel id="demo-simple-select-label">Age</InputLabel>
<Select
labelId="demo-simple-select-label"
id="demo-simple-select"
value={age}
label="Age"
onChange={handleChange}
>
<MenuItem value={10}>Ten</MenuItem>
<MenuItem value={20}>Twenty</MenuItem>
<MenuItem value={30}>Thirty</MenuItem>
</Select>
</FormControl>
Recursos avançados
O componente Select
é pensado para ser intercambiável com um elemento nativo <select>
.
If you are looking for more advanced features, like combobox, multiselect, autocomplete, async or creatable support, head to the Autocomplete
component. A ideia dessa ferramenta é ser uma versão melhorada das bibliotecas "react-select" e "downshift".
Propriedades
The Select component is implemented as a custom <input>
element of the InputBase. It extends the text field components sub-components, either the OutlinedInput, Input, or FilledInput, depending on the variant selected. Ele compartilha os mesmos estilos e muitas das mesmas propriedades. Consulte a página da API do respectivo componente para obter detalhes.
Filled and standard variants
With label + helper text
Without label
Disabled
Error
Read only
Required
Campos de Texto
As the user experience can be improved on mobile using the native select of the platform, we allow such pattern.
<FormControl fullWidth>
<InputLabel variant="standard" htmlFor="uncontrolled-native">
Age
</InputLabel>
<NativeSelect
defaultValue={30}
inputProps={{
name: 'age',
id: 'uncontrolled-native',
}}
>
<option value={10}>Ten</option>
<option value={20}>Twenty</option>
<option value={30}>Thirty</option>
</NativeSelect>
</FormControl>
TextField
The TextField
wrapper component is a complete form control including a label, input and help text. You can find an example with the select mode in this section.
Seleções customizadas
Here are some examples of customizing the component. You can learn more about this in the overrides documentation page.
The first step is to style the InputBase
component. Once it's styled, you can either use it directly as a text field or provide it to the select input
prop to have a select
field. Notice that the "standard"
variant is easier to customize, since it does not wrap the contents in a fieldset
/legend
markup.
🎨 If you are looking for inspiration, you can check MUI Treasury's customization examples.
Seleção Aberta Controlada
The Select
component can handle multiple selections. It's enabled with the multiple
prop.
Like with the single selection, you can pull out the new value by accessing event.target.value
in the onChange
callback. It's always an array.
Default
Seleção aberta controlada
You can control the open state of the select with the open
prop. Alternatively, it is also possible to set the initial (uncontrolled) open state of the component with the defaultOpen
prop.
Com um diálogo
While it's discouraged by the Material Design guidelines, you can use a select inside a dialog.
Acessibilidade
To properly label your Select
input you need an extra element with an id
that contains a label. That id
needs to match the labelId
of the Select
e.g.
<InputLabel id="label">Age</InputLabel>
<Select labelId="label" id="select" value="20">
<MenuItem value="10">Ten</MenuItem>
<MenuItem value="20">Twenty</MenuItem>
</Select>
Alternatively a TextField
with an id
and label
creates the proper markup and ids for you:
<TextField id="select" label="Age" value="20" select>
<MenuItem value="10">Ten</MenuItem>
<MenuItem value="20">Twenty</MenuItem>
</TextField>
For a native select, you should mention a label by giving the value of the id
attribute of the select element to the InputLabel
's htmlFor
attribute:
<InputLabel htmlFor="select">Age</InputLabel>
<NativeSelect id="select">
<option value="10">Ten</option>
<option value="20">Twenty</option>
</NativeSelect>
Unstyled
The component also comes with an unstyled version. It's ideal for doing heavy customizations and minimizing bundle size.