Я использую Выбрать поле из material-ui
Я хочу, чтобы по умолчанию была выбрана опция «выбрать значение», но после этого пользователь не может выбрать эту опцию.
<FormControl required className = {classes.formControl}>
<InputLabel htmlFor = "circle">Circle</InputLabel>
<Select
value = {circle}
onChange = {event => handleInput(event, "circle")}
input = {<Input name = "circle" id = "circle" />}
>
<MenuItem value = "" disabled>
<em>select the value</em>
</MenuItem>
<MenuItem value = {10}>Ten</MenuItem>
<MenuItem value = {20}>Twenty</MenuItem>
<MenuItem value = {30}>Thirty</MenuItem>
</Select>
<FormHelperText>Some important helper text</FormHelperText>
</FormControl>
Текущий код в песочнице: https://codesandbox.io/s/xoylmlj1qp
Хочу сделать так: https://jsfiddle.net/wc1mxdto/
Я изменил состояние 20 на пустую строку в круге
form: {
searchValue: "",
circle: '',
searchCriteria: ""
}
теперь ожидаемый результат должен быть выпадающим, должен показывать «пожалуйста, выберите значение», но в настоящее время он показывает это

уже состояние, я уже передаю значение состояния
ваша песочница не обновляется
см. первое поле выбора ... в котором есть опция "выбрать значение", но по умолчанию она не выбрана
@SakhiMansoor любым способом сделать это. ?
Да пишу ответ
Обновил мой ответ





Вам необходимо указать правильное значение MenuItem в состоянии, которое будет сопоставлено при рендеринге.
Вот рабочие коды и ящик: По умолчанию Select Value Material-UI
извините, это неправильный ответ. вместо 20, если я передаю строку "" (пустую), следует выбрать «выберите значение», как показано в скрипте jsfiddle.net/wc1mxdto
Он уже показывает его как значение по умолчанию, если вы передаете пустую строку. Пожалуйста, опишите вашу проблему
пожалуйста, смотрите вопрос об обновлении. Я обновляю больше, чтобы прояснить больше
см. обновленный код, я использовал свойство shrink в первом поле выбора codeandbox.io/s/j7kwpnp593
нет, когда я запускаю приложение, оно должно отображаться, пожалуйста, выберите значение
увидеть эту скрипку, когда я запускаю или открываю эту ссылку, она показывает "выберите свой вариант" jsfiddle.net/wc1mxdto/2, но после выбора пользователем параметров, но не выбора этого параметра "выберите свой вариант", потому что это отключено
Обновлены мои коды и ящик. Вам нужно renderValue как создание responseElement в select, отличном от menuItems
работает, так что это значение выбора - "значение выбора" ?? верный ? для пользовательского интерфейса это правильно, но логически это неправильно. потому что, если я беру, что это required, это всегда правда .. :(
Твоему примеру трудно последовать. Было бы лучше использовать несколько значимых имен вместо <Abc/> и test.
Поскольку React представил Реагирующие хуки, вам просто нужно передать значение по умолчанию в React.useState () как React.useState (10).
export default function CustomizedSelects() {
const classes = useStyles();
const [age, setAge] = React.useState(10);// <--------------(Like this).
const handleChangeEvent = event => {
setAge(event.target.value);
};
return (
<form className = {classes.root} autoComplete = "off">
<FormControl className = {classes.margin}>
<Select
value = {age}
className = {classes.inner}
onChange = {handleChangeEvent}
input = {<BootstrapInput name = "currency" id = "currency-customized-select" />}
>
<MenuItem value = {10}>Ten</MenuItem>
<MenuItem value = {20}>Twenty</MenuItem>
<MenuItem value = {30}>Thirty</MenuItem>
</Select>
</FormControl>
</form>
);
}
<FormControl variant = "outlined" className = {classes.formControl}>
<InputLabel id = "uni">UNI</InputLabel>
<Select
key = {value}
defaultValue = {value}
labelId = "uni"
id = "uni"
name = "uni"
onBlur = {onChange}
label = "uni"
>
{unis.map((u, i) => (
<MenuItem value = {u.value} key = {i}>
{u.label}
</MenuItem>
))}
</Select>
</FormControl>;Не могли бы вы добавить к своему ответу описание как и Зачем. Предоставленный вами фрагмент кода решает проблему? Другими словами: какова основная причина проблемы и как ее решает фрагмент кода?
Вы можете просто передать displayEmpty в select
<Select
id = "demo-simple-select-outlined"
displayEmpty
value = {select}
onChange = {handleChangeEvent}
>
и определите элемент меню как
<MenuItem value = ""><Put any default Value which you want to show></MenuItem>
Спасибо. Какое-то время чесал в затылке. Теперь я еще больше задаюсь вопросом, почему мне вообще не нужен этот вариант?
У меня была аналогичная проблема. В моем случае я применил функцию непосредственно к onChange, поэтому у меня было что-то вроде этого:
export default function CustomizedSelects() {
const classes = useStyles();
const [age, setAge] = React.useState(10);
return (
<form className = {classes.root} autoComplete = "off">
<FormControl className = {classes.margin}>
<Select
value = {age}
className = {classes.inner}
onChange = {(event) => setAge(event.target.value)}
input = {<BootstrapInput name = "currency" id = "currency-customized-select" />}
>
<MenuItem value = {10}>Ten</MenuItem>
<MenuItem value = {20}>Twenty</MenuItem>
<MenuItem value = {30}>Thirty</MenuItem>
</Select>
</FormControl>
</form>
); }
У меня также была отдельная кнопка для очистки значения выбора (или выбора пустого значения по умолчанию). Все работало, значение выбора было установлено правильно, за исключением того, что компонент «Выбор» не возвращался к своей форме по умолчанию - когда значение не выбрано. Я исправил проблему, переместив onChange в отдельную функцию handleChangeEvent, как в примере кода, который представляет @ B4BIPIN.
Я не эксперт в React и все еще учусь, и это был хороший урок. Надеюсь, это поможет ;-)
Это вызовет ошибку с TypeScript, поскольку event.target.value будет неизвестен
Просто используйте атрибут значение по умолчанию select. Вы можете обратиться к Документация API выбора материала для пользовательского интерфейса, чтобы узнать больше.
import React from 'react';
import {useState} from 'react';
import FormControl from '@material-ui/core/FormControl';
import InputLabel from '@material-ui/core/InputLabel';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const Selector = () => {
const [Value, setValue] = useState("1"); // "1" is the default value in this scenario. Replace it with the default value that suits your needs.
const handleValueChange = event => {
setValue(event.target.value);
}
return(
<FormControl>
<InputLabel id = "Input label">Select</InputLabel>
<Select
labelId= "Input label"
id= "Select"
value= {Value}
defaultValue= {Value}
onChange= {handleValueChange}
>
<MenuItem value = "1">Item1</MenuItem>
<MenuItem value = "2">Item2</MenuItem>
<MenuItem value = "3">Item3</MenuItem>
</Select>
</FormControl>
)
};
export default Selector;
Если вы посмотрите на Select Api of Material UI здесь, вы легко сможете это сделать.
const [age, setAge] = React.useState(10);// <--------------(Like this).
If true, a value is displayed even if no items are selected. In order to display a meaningful value, a function should be passed to the renderValue prop which returns the value to be displayed when no items are selected. You can only use it when the native prop is false (default).
<Select
displayEmpty
/>
сделай это с состоянием