reactjs - MUI 自动完成 : How to prevent open on focus, 在输入更改时打开?

标签 reactjs autocomplete material-ui

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

最佳答案

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

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

  • onOpen 将在认为 open 应设置为 true 时获得 called by Material-UI 。下面示例中的 handleOpen 会在 inputValue 为空时忽略此事件。
  • onClose 将在认为 open 应设置为 false 时获得 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
    ];
    

    Edit Autocomplete open if input

    关于reactjs - MUI 自动完成 : How to prevent open on focus, 在输入更改时打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61258089/

    相关文章:

    asp.net - JQuery AutoComplete 更新多个字段 ASP.NET

    javascript - Material-UI 对话框样式操作按钮

    reactjs - 将状态传递给另一个组件

    reactjs - 如何为 saga 错误处理创建通用包装函数?

    reactjs - 如何使用 Lodash 和 Normalizr 处理我的 redux 存储?

    jquery 自动完成

    javascript - 如何在 React 中自定义 Material UI?

    javascript - Express 提供的客户端 React 应用程序上一致的 url 路由

    javascript - 如何处理 React 的 onChange 事件中的小数值输入?

    command-line - 自动完成命令行参数