MUI 自动完成:如何防止在焦点上打开,而不是在输入更改时打开?

Posted

技术标签:

【中文标题】MUI 自动完成:如何防止在焦点上打开,而不是在输入更改时打开?【英文标题】:MUI Autocomplete: How to prevent open on focus, instead open on input change? 【发布时间】:2020-07-30 03:44:22 【问题描述】:

我正试图阻止自动完成功能在用户点击后立即打开建议。我希望它只在用户开始输入时打开。似乎没有一个道具可以实现这一点。 有没有办法使用 onInputChange 来切换自动完成“打开”道具(布尔)。 谢谢

【问题讨论】:

【参考方案1】:

是的,您可以显式控制open 属性,如果您想基于用户输入内容,那么我建议您也显式控制inputValue 属性。

以下是执行此操作的一种方法的工作示例。除了通常指定的道具之外,这还指定了 onOpen、onClose、onInputChange、open 和 inputValue 道具。

只要open 认为应该将open 设置为trueonOpen 就会得到called by Material-UI。下例中的handleOpen,当inputValue 为空时忽略此事件。 只要open 认为应该将open 设置为falseonClose 就会得到called by Material-UI。下面的示例无条件调用setOpen(false),因此它在所有与默认行为相同的情况下仍会关闭。 下例中的handleInputChange,除了管理inputValue 状态外,还根据值是否为空来切换open 状态。
/* eslint-disable no-use-before-define */
import React from "react";
import TextField from "@material-ui/core/TextField";
import Autocomplete from "@material-ui/lab/Autocomplete";

export default function ComboBox() 
  const [inputValue, setInputValue] = React.useState("");
  const [open, setOpen] = React.useState(false);
  const handleOpen = () => 
    if (inputValue.length > 0) 
      setOpen(true);
    
  ;
  const handleInputChange = (event, newInputValue) => 
    setInputValue(newInputValue);
    if (newInputValue.length > 0) 
      setOpen(true);
     else 
      setOpen(false);
    
  ;
  return (
    <Autocomplete
      id="combo-box-demo"
      open=open
      onOpen=handleOpen
      onClose=() => setOpen(false)
      inputValue=inputValue
      onInputChange=handleInputChange
      options=top100Films
      getOptionLabel=option => option.title
      style= width: 300 
      renderInput=params => (
        <TextField ...params label="Combo box" variant="outlined" />
      )
    />
  );


// 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 
// and many more options
];

【讨论】:

以上是关于MUI 自动完成:如何防止在焦点上打开,而不是在输入更改时打开?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何将焦点设置在打开新表单之前选择的最后一条记录上

无论光标或焦点在哪里,如何在 10 秒后关闭自动完成菜单?

如何让我的窗口从另一个在 MacOS 上拖动的窗口中窃取焦点?

H5+和mui开发的app,拍照完成后如何将拍到的照片在页面中形成预览图

MUI 里js动态添加数字输入框后,增加减少按钮无效