首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ReactJS中使用optgroup进行选择

在ReactJS中使用optgroup进行选择
EN

Stack Overflow用户
提问于 2018-12-10 14:05:44
回答 1查看 5.5K关注 0票数 5

我现在有以下数据:

代码语言:javascript
复制
[
    {
        "value": "G1-1",
        "text": "One",
        "optgroup": "Group 1
    },
    {
        "value": "G1-2",
        "text": "Two",
        "optgroup": "Group 1"
    },
    {
        "value": "G1-3",
        "text": "Three",
        "optgroup": "Group 1"
    },
    {
        "value": "G1-4",
        "text": "Four",
        "optgroup": "Group 1"
    },
    {
        "value": "G2-1",
        "text": "One",
        "optgroup": "Group 2"
    },
    {
        "value": "G2-2",
        "text": "Two",
        "optgroup": "Group 2"
    },
    {
        "value": "G2-3",
        "text": "Three",
        "optgroup": "Group 3"
    },
    {
        "value": "G2-4",
        "text": "Four",
        "optgroup": "Group 4"
    }
]

在我创建的简单下拉组件中,该数据作为选项传递,如下所示:

代码语言:javascript
复制
const SelectInputRound = ({defaultOption, name, value, onChange, options}) => {
    return (
        <select
            id={name}
            className="inputSelectRound form-control override-fc"
            name={name}
            value={value}
            onChange={onChange}>
            <option className="defaultOption" value="">{defaultOption}</option>
            {
                options.map((option) => {
                    return <option key={option.value} value={option.value}>{option.text}</option>;
                })
            }
        </select>
    );
};

我现在的问题是,我不知道如何分组我的选项,并将其传递给我的控制,这样我就可以让选项组出现在我的组件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-10 14:49:39

我现在的问题是,我不知道如何分组我的选项,并将其传递给我的控制,这样我就可以让选项组出现在我的组件中。

在将数据传递给您的Dropdown组件之前,可以先对其进行转换,以便相应地对数据进行分组。比如,就像这样。

代码语言:javascript
复制
const options = [
  {
    value: "G1-1",
    text: "One",
    optgroup: "Group 1"
  },
  {
    value: "G2-2",
    text: "Two",
    optgroup: "Group 2"
  },
  {
    value: "G2-3",
    text: "Three",
    optgroup: "Group 3"
  },
  {
    value: "G2-4",
    text: "Four",
    optgroup: "Group 4"
  }
];
const groupedOptions = {};
options.forEach(option => {
  if (!groupedOptions[option.optgroup]) groupedOptions[option.optgroup] = [];
  groupedOptions[option.optgroup].push({
    value: option.value,
    text: option.text
  });
});
console.log(groupedOptions);

但是,您还必须修改您的Dropdown组件,这样它就不会期望options成为props之一,而是需要一组选项。

代码语言:javascript
复制
const renderOptions = options => {
  return options.map(option => {
    return (
      <option key={option.value} value={option.value}>
        {option.text}
      </option>
    );
  });
};

const SelectInputRound = ({
  defaultOption,
  name,
  value,
  onChange,
  groupedOptions
}) => {
  return (
    <select
      id={name}
      className="inputSelectRound form-control override-fc"
      name={name}
      value={value}
      onChange={onChange}
    >
      {Object.keys(groupedOptions).map((group, index) => {
        return (
          <optgroup key={index} label={group}>
            {renderOptions(groupedOptions[group])}
          </optgroup>
        );
      })}
    </select>
  );
};

参见工作示例这里。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53707359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档