reactjs - react Material -ui 选择不起作用

标签 reactjs material-ui

我是新来的 AngularJS react ,在项目中使用 Material-ui,但我无法让选择组件像选择组件一样工作。基本上,我想用一组对象填充下拉列表,并在用户做出选择后对所选对象执行某些操作。我遇到了很多问题,最近的一个是我不知道如何在组件加载时设置默认起始值​​,并且在 GUI 中看不到所选选项。我可以设置状态并将其记录到控制台,您只是在选择组件中看不到它。另外,@material-ui/core 和material-ui 之间有什么区别。它们是不同的库,还是同一库的不同版本?

  class HomePage extends React.Component {
  constructor(props) {
    super();
    this.reportSelected = this.reportSelected.bind(this);
    this.state = {
      report: "report1"
    };
  }
  static propTypes = {
    classes: PropTypes.object
  };

  reports = [
    {
      name: "report1"
    },
    {
      name: "report2"
    },
    {
      name: "report3"
    }
  ];

  reportSelected = event => {
    this.setState((prevState) => {
      return {
        report: event.target.value
      }
    }, console.log(this.state))
  };

  render() {
    const { classes, headerTitle } = this.props;

    return (
      <div className={classes.homePage}>
        <HeaderTitle title="Home" />
        <Helmet>
          <title>{headerTitle}</title>
        </Helmet>

        <form>
          <FormControl className={classes.reportsDropdown}>
            <InputLabel htmlFor="reports">Reports</InputLabel>
            <Select
              value={this.state.report}
              onChange={this.reportSelected}
            >
              {this.reports.map(report => (
                <MenuItem value={report.name} key={report.name}>
                  {report.name}
                </MenuItem>
              ))}
            </Select>
          </FormControl>
        </form>
      </div>
    );
  }
}

更新:

以下代码按预期工作,

class HomePage extends React.Component {
  constructor(props) {
    super();
    this.reportSelected = this.reportSelected.bind(this);
    this.state = {
      report: "report1"
    };
  }
  static propTypes = {
    classes: PropTypes.object
  };

  reports = [
    {
      name: "report1"
    },
    {
      name: "report2"
    },
    {
      name: "report3"
    }
  ];

  reportSelected = event => {
    this.setState(() => {
      return {
        report: event.target.value
      }
    })
  };

  render() {
    const { classes, headerTitle } = this.props;

    return (
      <div className={classes.homePage}>
        <HeaderTitle title="Home" />
        <Helmet>
          <title>{headerTitle}</title>
        </Helmet>

        <form>
          <FormControl className={classes.reportsDropdown}>
            <InputLabel htmlFor="reports">Reports</InputLabel>
            <Select
              value={this.state.report}
              onChange={this.reportSelected}
            >
              {this.reports.map(report => (
                <MenuItem value={report.name} key={report.name}>
                  {report.name}
                </MenuItem>
              ))}
            </Select>
          </FormControl>
        </form>
      </div>
    );
  }
}

最佳答案

我想问题是初始选择的值必须与选择中项目的值匹配。

在代码示例中,您使用名称属性 this.reports[0].name 作为初始值,但您的菜单项使用对象本身作为值,即 value ={报告}

使用 name 属性作为菜单项的值,或者使用 this.reports[0] 作为初始值,看看是否有效。

关于你的第二个问题,ma​​terial-ui是该库的早期版本(0.xx系列)。 @material-ui 是最新最好的 1.11 版本。

关于reactjs - react Material -ui 选择不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588365/

相关文章:

reactjs - 使用 React 如何在每次选中复选框时附加到字符串并显示在另一个输入文本字段中

javascript - 在 ReactJS 中解构数组

Material-ui - 无法解析模块 'fbjs/lib/emptyFunction'、 'fbjs/lib/invariant'、 'fbjs/lib/warning'

css - 如何使用 React Material-UI、fontAwesome 图标和 Tailwind.css 左对齐所有列表项

javascript - 使用 fetch 的 React 组件不会从响应中填充状态

javascript - 当 prop 对象修改时,connect 不会改变子组件的 props

javascript - Reactjs - 将对象附加到对象

tabs - 如何在 Material-UI v1 中实现自定义 Tab 指示器颜色

reactjs - 如何将 MUI 主题对象的自定义属性与情感样式组件中的自定义 Prop 一起使用?

javascript - 如何为 MUI DataGrid 中的每一行添加一个序列号?