Есть ли какой-либо способ, которым я могу использовать isMulti, не удаляя варианты, которые я уже выбрал? В других словах, имея повторяющиеся / повторяющиеся выбранные параметры?

#javascript #reactjs #react-select

#javascript #reactjs #реагировать-выбрать

Вопрос:

В принципе, я хочу использовать библиотеку react-select и использовать isMulti prop, но проблема в том, что после выбора опции значение будет удалено. Как вы можете видеть ниже с предоставленными изображениями, как только я нажму «US: 1», эта опция исчезнет. Но для приложения, которое я пытаюсь создать, клиент, безусловно, может захотеть 2 одинаковых размера. Поэтому они выбрали бы 2 «US: 1», и это автоматически устанавливает количество в 2. Проблема в том, что как только они выбирают «US: 1», эта опция исчезает.

Это все, что у меня сейчас есть.

 const options = [
    {value: 1, label: "US: 1"},
    {value: 1.25, label: "US: 1.25"},
    {value: 1.5, label: "US: 1.5"},
    {value: 1.75, label: "US: 1.75"},
    {value: 2, label: "US: 2"},
    {value: 2.25, label: "US: 2.25"},
]
class Details extends Component {
 state={
        selectedOption: []
    }
 handleChange = (selectedOption) => {
        this.setState({ selectedOption: selectedOption });

    }
render() {

<Select isMulti={true} isSearchable={true} onClick={value.changeSize(id, selectedOption)} value={selectedOption} onChange={this.handleChange} options={options}></Select>
}
}
  

Вот пример того, о чем я говорю. «US: 1» исчезает при нажатии, когда я хочу, чтобы эта опция оставалась. Я думаю, что это изменяет мой массив «options» и отображает новый, у которого нет выбранной опции. Если я смогу каким-то образом продолжать передавать ему эти исходные значения после каждого onChange, это было бы здорово. Я не уверен, как копаться в библиотеке о том, как это сделать, или если это вообще возможно.
https://www.npmjs.com/package/react-select

https://i.imgur.com/1g7nI2z.png
https://i.imgur.com/djNjjvL.png

Комментарии:

1. Не могли бы вы предоставить информацию о том, как вы хотите изменить выбранное количество? Выбрав в меню или щелкнув по тегу?

Ответ №1:

Вот как я бы это сделал:

 class Details extends Component {
  state = {
    selectedOption: []
  };
  handleChange = selectedOption => {
    const newSelectedOption = selectedOption.map(opt => ({
      label: opt.label,
      innerValue: opt.value,
      // I set a random value because it is needed to be able to delete the value without deleting all of them
      value: Math.random()
    }));
    this.setState({ selectedOption: newSelectedOption });
  };
  render() {
    return (
      <Select
        isMulti={true}
        isSearchable={true}
        value={this.state.selectedOption}
        onChange={this.handleChange}
        options={options}
      />
    );
  }
}
  

Идея состоит в том, чтобы не использовать value его в качестве первоначальной цели. Когда label реквизит передается value внутрь Select , он все равно отображает его правильно. Таким образом, вы будете основываться на innerValue и хитрости react-select .

Вот живой пример

Комментарии:

1. СПАСИБО ЗА ПОМОЩЬ! похоже, это сделало свое дело! Я ценю это!

Ответ №2:

Я думаю, все, что вам нужно, это добавить hideSelectedOptions={false} в <Select /> . Нравится:

 <Select 
  isMulti={true} 
  hideSelectedOptions={false}
  options={options}
  ...
/>