Как установить значение по умолчанию в поле выбора материала 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: ""
}

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

сделай это с состоянием

Sakhi Mansoor 05.09.2018 12:34

уже состояние, я уже передаю значение состояния

user944513 05.09.2018 12:36

ваша песочница не обновляется

Sakhi Mansoor 05.09.2018 12:37

см. первое поле выбора ... в котором есть опция "выбрать значение", но по умолчанию она не выбрана

user944513 05.09.2018 12:38
codeandbox.io/s/xoylmlj1qp
user944513 05.09.2018 12:39

@SakhiMansoor любым способом сделать это. ?

user944513 05.09.2018 12:53

Да пишу ответ

Sakhi Mansoor 05.09.2018 12:53

Обновил мой ответ

Sakhi Mansoor 05.09.2018 13:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
27
8
69 947
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

Вот рабочие коды и ящик: По умолчанию Select Value Material-UI

извините, это неправильный ответ. вместо 20, если я передаю строку "" (пустую), следует выбрать «выберите значение», как показано в скрипте jsfiddle.net/wc1mxdto

user944513 05.09.2018 12:59

Он уже показывает его как значение по умолчанию, если вы передаете пустую строку. Пожалуйста, опишите вашу проблему

Sakhi Mansoor 05.09.2018 13:02

пожалуйста, смотрите вопрос об обновлении. Я обновляю больше, чтобы прояснить больше

user944513 05.09.2018 13:06

см. обновленный код, я использовал свойство shrink в первом поле выбора codeandbox.io/s/j7kwpnp593

user944513 05.09.2018 13:07

нет, когда я запускаю приложение, оно должно отображаться, пожалуйста, выберите значение

user944513 05.09.2018 13:08

увидеть эту скрипку, когда я запускаю или открываю эту ссылку, она показывает "выберите свой вариант" jsfiddle.net/wc1mxdto/2, но после выбора пользователем параметров, но не выбора этого параметра "выберите свой вариант", потому что это отключено

user944513 05.09.2018 13:10

Обновлены мои коды и ящик. Вам нужно renderValue как создание responseElement в select, отличном от menuItems

Sakhi Mansoor 05.09.2018 13:14

работает, так что это значение выбора - "значение выбора" ?? верный ? для пользовательского интерфейса это правильно, но логически это неправильно. потому что, если я беру, что это required, это всегда правда .. :(

user944513 05.09.2018 13:21

Твоему примеру трудно последовать. Было бы лучше использовать несколько значимых имен вместо <Abc/> и test.

Qwerty 10.04.2019 12:25

Поскольку 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>;

Не могли бы вы добавить к своему ответу описание как и Зачем. Предоставленный вами фрагмент кода решает проблему? Другими словами: какова основная причина проблемы и как ее решает фрагмент кода?

Micheal Hill 12.04.2020 05:01

Вы можете просто передать 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>

Спасибо. Какое-то время чесал в затылке. Теперь я еще больше задаюсь вопросом, почему мне вообще не нужен этот вариант?

Jarrod McGuire 11.03.2021 10:34

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

Virthuss 03.03.2021 04:18

Просто используйте атрибут значение по умолчанию 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 здесь, вы легко сможете это сделать.

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

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
/>

Другие вопросы по теме