реагировать материал-интерфейс не работает - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в реакции от angularjs, использую Material-UI для проекта, и я не могу заставить выбранный компонент работать как выбранный компонент.По сути, я хочу заполнить раскрывающийся список массивом объектов и что-то сделать с выбранным объектом, как только выбор будет сделан пользователем.Я столкнулся с кучей проблем, последняя из которых заключается в том, что я не могу понять, как установить начальное значение по умолчанию при загрузке компонента, и не вижу выбранную опцию в графическом интерфейсе.Я могу установить состояние и выйти из системы на консоль, которую вы просто не видите в компоненте select.Кроме того, в чем разница между @ 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>
    );
  }
}

1 Ответ

0 голосов
/ 29 мая 2018

Я думаю, проблема в том, что начальное выбранное значение должно соответствовать значению элемента в select.

В примере кода вы используете свойство name this.reports[0].name в качестве начального значения, новаши пункты меню используют сам объект для значения, то есть value={report}.

Либо используйте свойство name для значения пунктов меню, либо используйте this.reports[0] в качестве исходного значения и посмотрите, работает ли это.

Что касается вашего второго вопроса, material-ui - это предыдущая версия библиотеки (серия 0.xx). @ material-ui - последняя и самая лучшая версия 1.11.

...