ReactJS:如何在 <DropDownMenu/> 中动态渲染 Material-UI 的 <MenuItem/>?

ReactJS: How to dynamically render Material-UI's <MenuItem/> inside <DropDownMenu/>?

使用 ReactJS + Material-UI,我有一个名为 colors 的数组,其中包含不同颜色的字符串。例如,数组 colors 有 3 个颜色字符串:"white"、"blue"、“绿色。然后我想渲染每个颜色字符串在 [= 中有一个 <MenuItem/> 18=] (http://www.material-ui.com/#/components/dropdown-menu)。一旦选择了 <MenuItem/>,我想控制台记录那个特定的颜色,比如选择 "white": console.log("white").

所以我使用了 .forEach 但是它没有显示任何字符串而且它是空的。我做错了什么?

代码如下:

  constructor() {
    super()

    this.state = {
      value: 1,
    }
  }

  dropDownColorChange(event, index, value) {
    this.setState({value: value})
    //Not sure how to implement here dynamically based on array size. Would like to console.log the color string of the selected
  }

  render() {
    var colors = ["white", "blue", "green"] //would be able to handle any array size


    return (
             <div>
               <DropDownMenu
                value={this.state.valueTwo}
                onChange={this.dropDownColorChange}
              >
                {
                    <MenuItem value={1} primaryText="Select" />
                  colors.forEach(color => {
                    <MenuItem primaryText={color}/>
                  })
                }
              </DropDownMenu>
             </div>
    )
  }

谢谢

你几乎做对了。您必须 map 可用颜色和 return 每个颜色的 MenuItem:

const colors = ['white', 'blue', 'green'];

class ColorChanger extends Component {
  constructor() {
    super();

    this.state = {
      selectedColorValue: 1,
    };
  }

  handleColorChange(event, index, value) {
    console.log(`You have selected ${colors[value]} color`);

    this.setState({
      selectedColorValue: value
    });
  }

  render() {
    return (
      <div>
        <DropDownMenu value={this.state.selectedColorValue} onChange={this.handleColorChange}>
          {colors.map((color, index) =>
            <MenuItem key={index} value={index} primaryText={color} />
          )}
        </DropDownMenu>
      </div>
    );
  }
}

map(与forEach相反)return是一个数组,其中每个元素都是谓词函数的return值。在您的情况下,它 return 是 <MenuItem />