MUI 自动完成自定义选项,不显示所选选项

Posted

技术标签:

【中文标题】MUI 自动完成自定义选项,不显示所选选项【英文标题】:MUI Autocomplete custom options, not showing selected option 【发布时间】:2021-12-05 09:37:37 【问题描述】:

我正在使用 MUI v5 Autocomplete 作为我的下拉菜单。

I have options with title and id when an option is selected, I want to store the id in the state, also want to update the select (autocomplete here) value with selected movie.

选择中的文本框未反映使用 value 道具设置的值。

我尝试了isOptionEqualToValue,但它有助于在下拉菜单打开时突出显示值。关闭下拉菜单时,不反映所选电影名称。

https://codesandbox.io/s/combobox-material-demo-forked-osex0?file=/demo.js

import * as React from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";

export default function ComboBox() 
  const [movie, setMovie] = React.useState(2);

  return (
    <>
      Movie ID value in the state movie
      <Autocomplete
        disablePortal
        id="combo-box-demo"
        value=movie == null ? "" : movie
        options=top100Films
        onChange=(e, data) => 
          if (data && data.id) 
            setMovie(data.id);
          
        
        getOptionLabel=(option) => option.title || ""
        sx= width: 300 
        renderInput=(params) => <TextField ...params label="Movie" />
        isOptionEqualToValue=(option, value) => option.id === value
      />
    </>
  );


const top100Films = [
   title: "The Shawshank Redemption", id: 1 ,
   title: "The Godfather", id: 2 ,
   title: "The Godfather: Part II", id: 3 
];

即使选择了该选项,它也不会反映在文本框中

【问题讨论】:

【参考方案1】:

如果你想使用controlled mode,value 属性应该是options 数组中的对象之一:

const getDefaultOption = () => top100Films.find((m) => m.id === 2) ?? null;

export default function ComboBox() 
  const [movie, setMovie] = React.useState(getDefaultOption);

  return (
    <>
      <Box mb=3>Movie ID value in the state movie.id</Box>
      <Autocomplete
        disablePortal
        id="combo-box-demo"
        value=movie
        options=top100Films
        onChange=(e, data) => setMovie(data)
        getOptionLabel=(option) => option.title || ""
        sx= width: 300 
        renderInput=(params) => <TextField ...params label="Movie" />
      />
    </>
  );

【讨论】:

以上是关于MUI 自动完成自定义选项,不显示所选选项的主要内容,如果未能解决你的问题,请参考以下文章

将输入文本框中的文本替换为所选自动完成选项中的文本

如何向 React/MUI 自动完成组件添加唯一键?

ios中使用monotouch的自动完成选项的自定义列表

如何使用选项组重置材料自动完成中的自定义过滤器

MUI 自动完成功能不适用于 react-hook-form

Swift println()在编写代码时不显示自动完成选项