Материал пользовательского интерфейса Multi-Select другое значение кода и видимое значение - показать ключи вместо значений - PullRequest
1 голос
/ 25 апреля 2019

Я использую Material UI Multiple Select, основываясь на примере документации.Мне нужно сохранить идентификатор выбранной опции и показать имя, чтобы я отображал объект.Когда я использовал пример из документации с заполнителем, я вижу идентификаторы вместо имен выбранных.См .: https://codesandbox.io/s/kxz5yqmrzv?from-embed

const names = [
  { id: "a", name: "Oliver Hansen" },
  { id: "b", name: "Van Henry" },
  { id: "c", name: "April Tucker" },
  { id: "d", name: "Ralph Hubbard" },
  { id: "e", name: "Omar Alexander" },
  { id: "f", name: "Carlos Abbott" },
  { id: "g", name: "Miriam Wagner" },
  { id: "h", name: "Bradley Wilkerson" },
  { id: "i", name: "Virginia Andrews" },
  { id: "j", name: "Kelly Snyder" }
];

          <Select
            multiple
            displayEmpty
            value={this.state.name}
            onChange={this.handleChange}
            input={<Input id="select-multiple-placeholder" />}
            renderValue={selected => {
              if (selected.length === 0) {
                return <em>Placeholder</em>;
              }

              return selected.join(", ");
            }}
            MenuProps={MenuProps}
          >
            <MenuItem disabled value="">
              <em>Placeholder</em>
            </MenuItem>
            {names.map(name => (
              <MenuItem
                key={name.id}
                value={name.id}
                // style={getStyles(name, this)}
              >
                {name.name}
              </MenuItem>
            ))}
          </Select>

1 Ответ

1 голос
/ 25 апреля 2019

Select просто делает то, что вы сказали ему сделать в вашей функции renderValue:

            renderValue={selected => {
              if (selected.length === 0) {
                return <em>Placeholder</em>;
              }
              // This will return a comma-separated list of the values.
              return selected.join(", ");
            }}

Вы можете позволить Material-UI определить правильное отображение, оставив renderValue неопределенным, когда вы выбрали значения:

            renderValue={
              this.state.name.length > 0
                ? undefined
                : () => <em>Placeholder</em>
            }

Edit Material demo

Также возможно сделать более сложный renderValue, который использует вашу структуру данных names для преобразования значений в имена, но это необходимо, только если вы хотите сделать что-то отличное от рендеринга выбранного по умолчанию. значения (например, в демонстрации чипа).

...