通过删除所选选项或添加新选项来附加数组中的值

Appned the value in array by removing the selected option or adding new options

我有很多这样的选项

const objectArray = [
  { name: 'Option 1', cat: 'Group 1' },
  { name: 'Option 2', cat: 'Group 1' },
  { name: 'Option 3', cat: 'Group 1' },
  { name: 'Option 4', cat: 'Group 2' },
  { name: 'Option 5', cat: 'Group 2' },
  { name: 'Option 6', cat: 'Group 2' },
  { name: 'Option 7', cat: 'Group 2' },
];

我的组件是一个函数式组件,我曾经这样使用过useState

var specializations = [];
const onSelectSpecialization = (event, value) => {
  specializations.push(value);
};
const onremoveSpecialization = (event, value) => {
  specializations.filter(
    (specializations) => specializations.name === value.name
  );
};

我使用的Multiselect模块是multiselect-react-dropdown

<Multiselect
  options={objectArray}
  selectionLimit='5'
  onSelect={onSelectSpecialization}
  onRemove={onremoveSpecialization}
  style={{ height: 'auto' }}
  closeOnSelect='false'
  emptyRecordMsg='No specialization found'
  placeholder='Select upto 5 Specialization'
  displayValue='name'
  id='true'
/>;

我想要最终数组,其中只显示选定的值,如果我将它们从列表中删除,则不应有任何值作为屏幕截图中的共享

see here for referenence

您没有以正确的方式使用 useState 挂钩。
尝试像这样更改您的代码:

const objectArray = [
  { name: 'Option 1', cat: 'Group 1' },
  { name: 'Option 2', cat: 'Group 1' },
  { name: 'Option 3', cat: 'Group 1' },
  { name: 'Option 4', cat: 'Group 2' },
  { name: 'Option 5', cat: 'Group 2' },
  { name: 'Option 6', cat: 'Group 2' },
  { name: 'Option 7', cat: 'Group 2' },
];

const [specializations, setSpecializations] = useState(objectArray);

const onSelectSpecialization = (event, value) => {
    setSpecializations(oldSpecializations => [ ...oldSpecializations, value])
};
const onremoveSpecialization = (event, value) => {
  const filteredSpecializations = specializations.filter(
    (spec) => spec.name === value.name
  );
  setSpecializations(filteredSpecializations)
};

如您现在所见,它正在使用 useState 挂钩更新 specializations 数组。

此外,将 MultiSelect 选项更改为 specializations:

<Multiselect
  options={specializations}
  selectionLimit='5'
  onSelect={onSelectSpecialization}
  onRemove={onremoveSpecialization}
  style={{ height: 'auto' }}
  closeOnSelect='false'
  emptyRecordMsg='No specialization found'
  placeholder='Select upto 5 Specialization'
  displayValue='name'
  id='true'
/>;