【问题标题】:Material UI Autocomplete change selected value of one autocomplete when value is changed in another autocomplete当值在另一个自动完成中更改时,Material UI Autocomplete 更改一个自动完成的选定值
【发布时间】:2019-12-19 18:58:45
【问题描述】:

我在一个表单上有两个自动完成组件。当第一个自动完成的值改变时,我想改变第二个自动完成的值。请参阅下面的示例代码。当第一个自动完成的值发生更改时,我将“movie2”设置为状态并将其作为值传递给第二个自动完成。但是第二个自动完成没有选择值。任何帮助将不胜感激。

import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";

class Demo extends React.Component {
  constructor(props) {
    super(props);
    this.state = {};
  }

  render() {
    return (
      <>
        <Autocomplete
          id="combo-box-demo"
          value={this.state.movie1}

          options={top100Films}
          getOptionLabel={option => option.title}
          style={{ width: 300 }}
          renderInput={params => (
            <TextField
              {...params}
              label="Combo box"
              variant="outlined"
              fullWidth
            />
          )}
          onChange={(event, val) => this.setState({ movie1: val, movie2: top100Films[2] })}
        />
        <Autocomplete
          id="combo-box-demo"
          value={this.state.movie2}
          options={top100Films}
          getOptionLabel={option => option.title}
          style={{ width: 300 }}
          renderInput={params => (
            <TextField
              value={this.state.movie2 ? this.state.movie2.title : ""}
              {...params}
              label="Combo box"
              variant="outlined"
              fullWidth
            />
          )}
        />
      </>
    );
  }
}

export default Demo;

// Top 100 films as rated by IMDb users. http://www.imdb.com/chart/top
const top100Films = [
  { title: "The Shawshank Redemption", year: 1994 },
  { title: "The Godfather", year: 1972 },
  { title: "The Godfather: Part II", year: 1974 },
];

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    我试过你的代码,看来你只需要在构造函数中初始化状态,请试试这个:

    constructor(props) {
      super(props);
      this.state = {
        movie1: null,
        movie2: null
      };
    }
    

    【讨论】:

    • 太棒了,这行得通。非常感谢。不知道为什么需要初始化状态。
    • @user1566434 当值以undefined 开头时,iMaterial-UI 将其视为“不受控制”的输入。当它以 undefined 以外的内容开头时,它会将其视为controlled
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 2021-03-07
    • 2021-10-04
    • 2021-10-21
    • 2021-06-05
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多