多重选择限制的下拉菜单

问题描述 投票:0回答:3

我比较新 ReactSemantic UI 有一个组件叫做 Dropdown 有恃无恐 multipleselection它允许选择多个项目。不幸的是,有

我的输出状态是这样的。

const selectedItems = [
   {key: 1, value: 1, text: 'Item 1'},
   {key: 2, value: 2, text: 'Item 2'},
   {key: 3, value: 3, text: 'Item 3'},
];

我怎样才能设置N个元素的数量限制?

非常感谢

javascript arrays reactjs semantic-ui-react
3个回答
1
投票

那么根据 https:/react.semantic-ui.commodulesdropdown#dropdown-example-multiple-selection。 您需要创建受控组件,这意味着您将绑定 value={this.state.selectedItems} 那你就束缚 onChange={(e,data) => { this.handleChange(e,data )} 而在你的代码中

onChange (e, data) {
  const currentItems = this.state.selectedItems

  if (currentItems.length <= MAX_SELECTION ) {
    currentItems.push(data)

    this.setState({
      selectedItems: currentItems
    })
  }
}

这将是一个装箱控制的组件,它将允许你自己控制状态,你将限制改变状态,可能你还需要在这个onChange事件中处理从状态中删除项目。


1
投票

在这个onChange事件中,你可能还需要处理从状态中移除物品的问题。Semantic UI React 下拉选项提供了一个函数,名为 onAddItem. 你将不得不使用 value 数据键,并做类似这样的事情。

const onAddItem = (event, data) => {

    1.Fetch the state of the selected values, stored in the value key
    2. Check if the limit is greater than 2
    3. If the condition is met, then add
    4. Else, show an error

}

文件链接


1
投票

我想建议另一种方法.直接对下拉值设置useState。

import React, { useState } from 'react';
import { Dropdown } from 'semantic-ui-react';

const MAX_FRUITS_SELECTION = 3;

const FruitsSelect = () => {
  const [fruitId, setFruitId] = useState([]);

  const optionsFRUITSFake = [
    { key: 1, value: 1, text: 'Orange' },
    { key: 2, value: 2, text: 'Lemon' },
    { key: 3, value: 3, text: 'Apple' },
    { key: 4, value: 4, text: 'Banana' },
    { key: 5, value: 5, text: 'Melon' },
    { key: 6, value: 6, text: 'Pineapple' }
  ];

  const handleDropFilterFruit = (e: any, data?: any) => {
    if (data.value.length <= MAX_FRUITS_SELECTION) {
      setFruitId(data.value);
    }
  };

  return (
    <Dropdown
      placeholder="Select Fruits"
      onChange={handleDropFilterFruit}
      value={fruitId}
      fluid
      multiple
      selectOnNavigation={false}
      search
      selection
      options={optionsFRUITSFake}
    />
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(
  <React.StrictMode>
    <FruitsSelect />
  </React.StrictMode>,
  rootElement
);
<!DOCTYPE html>
<html lang="en">
<body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
	<div id="root"></div>
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.