如何在 select 下拉菜单中的选项下添加子选项?

How to add sub-options under options in select dropdown menu in react?

我正在实现一个 React 应用程序,其中有一个下拉菜单,其中包含使用 json-server 从虚拟后端 api 获取的不同选项 我可以添加选项,但我需要添加也从 api.

中获取的子选项

这是我的 db.json Api 结构:

{  
  "groups":[  
     {  
        "key":"version",
        "apis":["system_info","admin"]
     },
     {  
        "key":"admin",
        "apis":["patients","doctors"]
     },
    
  ]
}

上面的json响应中keys是选项,apis下面的字符串都是子选项。

这是我的下拉菜单实现:

import React from "react";

export default class ApiDropDown extends React.Component {
  constructor() {
    super();
    this.state = {
      options: []
    };
  }

  componentDidMount() {
    this.fetchOptions();
  }

  fetchOptions() {
    fetch("http://localhost:5000/groups")
      .then((res) => {
        return res.json();
      })
      .then((json) => {
        console.log(json);
        this.setState({ options: json });
      });
  }
  render() {
    return (
      <div >
        <select className="togglebutton" >
        <option selected disabled>Choose here</option>
          {this.state.options.map((option, key) => (
           
           <option key={key}>{option["key"]}</option>
           
           
          ))}
        </select>
      </div>
    );
  }
}

Api 响应:

0: {key: "version", apis: Array(2)}
1: {key: "admin", apis: Array(2)}

上面的下拉菜单适用于选项,但我需要实现子选项。 知道我该如何实现吗?

谢谢!

您可以只获取子选项,因为您没有获取选项。并使用以下代码作为子选项。

render() {
    return (
     <div >
      <select className="togglebutton" >
      <option selected disabled>Choose here</option>
        {this.state.options.map((option, key) => (
       
        <option key={key}>{option["key"]}</option>
         
         <optgroup label={option["key"]}>
            {this.state.subOptions.map((subOption, key) => (
              <option>{subOption.key}</option>
            ))}
             // OR

           {this.state.option["key"].subOptions.map((subOpt,i) => (
              <option>{subOpt.i}</option>
            ))}
           
         </optgroup>
   
       ))}
     </select>
   </div>
 );
}