Как установить значение по умолчанию в поле выбора материала UI в React?

Я использую поле выбора из 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: ""
}

теперь ожидаемый результат должен быть в раскрывающемся списке «Пожалуйста, выберите значение», но в настоящее время он показывает это  введите описание изображения здесь


person user944513    schedule 05.09.2018    source источник
comment
сделай это с состоянием   -  person Sakhi Mansoor    schedule 05.09.2018
comment
состояние уже выполнено, я уже передаю значение состояния   -  person user944513    schedule 05.09.2018
comment
ваша песочница не обновляется   -  person Sakhi Mansoor    schedule 05.09.2018
comment
см. первое поле выбора ... в котором есть значение выбора, но по умолчанию оно не выбрано   -  person user944513    schedule 05.09.2018
comment
codeandbox.io/s/xoylmlj1qp   -  person user944513    schedule 05.09.2018
comment
@SakhiMansoor любым способом сделать это. ?   -  person user944513    schedule 05.09.2018
comment
Да пишу ответ   -  person Sakhi Mansoor    schedule 05.09.2018
comment
Обновил мой ответ   -  person Sakhi Mansoor    schedule 05.09.2018


Ответы (7)


Вам необходимо указать правильное значение MenuItem в состоянии, которое будет сопоставлено при рендеринге.

Вот рабочие коды и ящик: Default Select Value Material-UI

person Sakhi Mansoor    schedule 05.09.2018
comment
извините, это неправильный ответ. вместо 20, если я передаю "" (пустую) строку, она должна выбрать, пожалуйста, выберите значение, как показано в скрипте jsfiddle.net/wc1mxdto - person user944513; 05.09.2018
comment
Он уже показывает его как значение по умолчанию, если вы передаете пустую строку. Пожалуйста, опишите вашу проблему - person Sakhi Mansoor; 05.09.2018
comment
пожалуйста, смотрите вопрос об обновлении. Я обновляю больше, чтобы прояснить больше - person user944513; 05.09.2018
comment
см. обновленный код. Я использовал свойство shrink в первом поле выбора codeandbox.io/s/j7kwpnp593 - person user944513; 05.09.2018
comment
нет, когда я запускаю приложение, оно должно отображаться, пожалуйста, выберите значение - person user944513; 05.09.2018
comment
увидеть эту скрипку, когда я запускаю, или открываю эту ссылку, которую она показывает, выберите свой вариант jsfiddle.net/wc1mxdto/2 но после того, как пользователь выберет параметры, но не выберет эту опцию, выберите свой вариант, потому что он отключен - person user944513; 05.09.2018
comment
Обновлены мои коды и ящик. Вам нужно renderValue как создание responseElement в select, отличном от menuItems - person Sakhi Mansoor; 05.09.2018
comment
работает, так что это значение выбора является значением выбора ?? верный ? для пользовательского интерфейса это правильно, но логически неверно. потому что, если я беру это required, это всегда правда .. :( - person user944513; 05.09.2018
comment
Твоему примеру трудно последовать. Было бы лучше использовать несколько значимых имен вместо <Abc/> и test. - person Qwerty; 10.04.2019

Поскольку React представил React-Hooks, вам просто нужно передать значение по умолчанию в React.useState () как React.useState (10).


export default function CustomizedSelects() {
  const classes = useStyles();
  const [age, setAge] = React.useState(10);// <--------------(Like this).
  const handleChange = event => {
    setAge(event.target.value);
  };
  return (
    <form className={classes.root} autoComplete="off">
      <FormControl className={classes.margin}>
        <Select
          value={age}
          className={classes.inner}
          onChange={handleChange}
          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>
  );
}


person B4BIPIN    schedule 16.06.2019

Вы можете просто передать displayEmpty в select

<Select
    id="demo-simple-select-outlined"
    displayEmpty
    value={select}
    onChange={handleChange}
>

и определите элемент меню как

<MenuItem value=""><Put any default Value which you want to show></MenuItem>
person Alok Kumar    schedule 15.08.2020
comment
Спасибо. Какое-то время чесал в затылке. Теперь я еще больше задаюсь вопросом, почему мне вообще не нужен этот вариант? - person Jarrod McGuire; 11.03.2021

У меня была аналогичная проблема. В моем случае я применил функцию непосредственно к 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 в отдельную функцию handleChange, как в примере кода, который представляет @ B4BIPIN.

Я не эксперт в React и все еще учусь, и это был хороший урок. Надеюсь, это поможет ;-)

person Strabek    schedule 26.02.2021
comment
Это вызовет ошибку с TypeScript, поскольку event.target.value будет неизвестен - person Virthuss; 03.03.2021

Просто используйте атрибут defaultValue для 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;
person Manil Malla    schedule 18.06.2021

Если вы посмотрите здесь Select Api of Material UI, вы легко сможете это сделать. .

  1. Как объяснялось выше, вам необходимо передать значение по умолчанию в переменной состояния:
const [age, setAge] = React.useState(10);// <--------------(Like this).
  1. Установите для displayEmpty значение true:

Если true, значение отображается, даже если ни один элемент не выбран. Чтобы отобразить значимое значение, в свойство renderValue необходимо передать функцию, которая возвращает значение, которое будет отображаться, когда ни один элемент не выбран. Вы можете использовать его только в том случае, если для собственного свойства задано значение false (по умолчанию).

<Select 
  displayEmpty
/>
person jean luc sanou    schedule 16.07.2021

person    schedule
comment
Не могли бы вы добавить к своему ответу описание как и почему предоставленный вами фрагмент кода решает проблему? Другими словами: какова основная причина проблемы и как ее решает фрагмент кода? - person Micheal Hill; 12.04.2020