Выберите с вводом чипа, не отображая выбранное значение

У меня есть Select, и входы в формате чипа. Я попробовал консольный журнал выбранного значения, и все в порядке. Но по какой-то причине он не отображается в поле выбора. Что я здесь делаю неправильно?

 handleChangeEvent = event => {
    this.setState({ badge : event.target.value });
  };

 const chipOptions = [
      {key: 1, 'text': 'text1',  'value': 'text1'},
      {key: 2, 'text':'text2', 'value':'text2'},
      {key: 3, 'text':'text3', 'value':'text3'}
    ]

<FormControl className = {classes.formControl}>
            <Select
              value = {this.state.badge}
              onChange = {this.handleChangeEvent}
              inputProps = {{
                name: 'badge',
                id: 'badge-simple',
              }}
            >
            {chipOptions && chipOptions.map(option=> (
              <Chip key = {option.value} label = {option.value} className = {classes.chip} value = {option.value} />
            ))}

          </Select>
        </FormControl>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Способ по умолчанию, которым Select отображает выбранное значение, заключается в отображении его дочерних элементов. В Выберите исходный код, когда он перебирает дочерние элементы Select, он делает следующее:

        selected = areEqualValues(value, child.props.value);
        if (selected && computeDisplay) {
          displaySingle = child.props.children;
        }

Это основано на предположении, что у Select есть MenuItem дети. Например, в следующем примере будет выбран первый элемент меню, а дочерним элементом этого элемента меню будет текст «Элемент 1»:

<Select value = {1}>
   <MenuItem value = {1}>Item 1</MenuItem>
   <MenuItem value = {2}>Item 2</MenuItem>
</Select>

У ваших фишек нет потомков, поэтому ничего не отображается. Вы можете настроить это поведение, указав свойство renderValue на Select. Это функция, которая получает значение и может решить, что отображать.

В следующем примере показано использование реквизита renderValue для рендеринга Chip:

import React, { useState } from "react";
import ReactDOM from "react-dom";

import FormControl from "@material-ui/core/FormControl";
import Chip from "@material-ui/core/Chip";
import Select from "@material-ui/core/Select";
import { withStyles } from "@material-ui/core/styles";

const styles = theme => ({
  formControl: {
    margin: theme.spacing.unit,
    minWidth: 120
  }
});
const chipOptions = [
  { key: 1, text: "text1", value: "text1" },
  { key: 2, text: "text2", value: "text2" },
  { key: 3, text: "text3", value: "text3" }
];

function App({ classes }) {
  const [value, setValue] = useState("text1");
  const renderChip = value => {
    return <Chip label = {value} className = {classes.chip} />;
  };
  return (
    <>
      <FormControl className = {classes.formControl}>
        <Select
          inputProps = {{
            name: "badge",
            id: "badge-simple"
          }}
          renderValue = {renderChip}
          value = {value}
          onChange = {event => {
            console.info(event.target.value);
            setValue(event.target.value);
          }}
        >
          {chipOptions &&
            chipOptions.map(option => (
              <Chip
                key = {option.value}
                label = {option.value}
                className = {classes.chip}
                value = {option.value}
              />
            ))}
        </Select>
      </FormControl>
    </>
  );
}
const StyledApp = withStyles(styles)(App);
const rootElement = document.getElementById("root");
ReactDOM.render(<StyledApp />, rootElement);

Edit Chip Select

Здорово..! @Ryan Но в моем случае мне нужно опубликовать значение в элементах Payload и Display во внешнем интерфейсе с помощью множественного выбора.

Lee 27.01.2020 12:23

@Lee Я рекомендую вам создать отдельный вопрос, в котором вы сможете более подробно объяснить свою проблему.

Ryan Cogswell 27.01.2020 13:22

Вот связь

Lee 28.01.2020 06:17

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