【问题标题】:Material-UI Autocomplete store only a single property of an objectMaterial-UI Autocomplete 仅存储对象的单个属性
【发布时间】:2020-01-21 20:08:20
【问题描述】:

我正在尝试使用Autocomplete ,但我需要使值仅存储特定属性而不是完整对象。

例如 这个案例是属性Value,但它可以是任何一个。

const options = [
  { Value: 1, label: "Option 1", anyOtherProp: 123 },
  { Value: 2, label: "Option 2", anyOtherProp: 456 },
  { Value: 3, label: "Option 3", anyOtherProp: 789 }
];

export default function App() {
  const [value, setValue] = useState(null);

  const valueKey = "Value"; // this should be any key

  const handleChange = (e, value) => {
    // what to do here?
    setValue(value[valueKey]);
  };    

  return (
    <div className="App">
      <Autocomplete
        options={options}
        onChange={handleChange}
        value={value}
        getOptionLabel={option => option.label}
        renderInput={props => <TextField {...props} fullWidth />}
      />
    </div>
  );
}

当我这样做时,输入为空且不显示任何内容。

我需要该值只是对象的一个​​属性,而不是完整选项的对象。

这是显示问题的codesandbox

【问题讨论】:

    标签: javascript reactjs autocomplete material-ui


    【解决方案1】:

    检查value 并致电setValue。还将CustomAutocomplete 上的value 道具替换为defaultValue,一切都会正常工作。 检查小提琴Fiddle Link

    export default function App() {
      const [value, setValue] = useState(null);
    
      const valueKey = "Value"; // this should be any key
    
      const handleChange = (e, value) => {
        // what to do here?
        if(value) setValue(value[valueKey]);
      };
    
      return (
        <div className="App">
          <CustomAutocomplete
            onChange={handleChange}
            defaultValue={value}
            options={options}
          />
        </div>
      );
    }
    

    【讨论】:

    • 在您的小提琴中,您将defaultValue 传递给CustomAutocomplete,但它不会传递给Autocomplete。所以在你的情况下,你甚至不需要将value 传递给组件?
    • 还需要在Autocomplete 中更新相同的内容。它可以是CustomAutocomplete 中的值,但它必须是Autocomplete 组件中的defaultValue。不错的收获。
    • 从列表中删除项目时,在 .map 中使用它时会出现问题。你知道怎么解决吗?
    • @Vencovsky 你能提供更多细节吗,我没有使用材质 UI。提供小提琴会更有帮助
    • @Vencovsky 你实现的方式是错误的,我现在没有太多时间,但肯定会在这方面创造一个小提琴并与你分享。
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2020-08-06
    • 2021-02-16
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多