作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图阻止自动完成在用户点击后立即打开建议。我希望它只在用户开始输入时打开。似乎没有 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
];
关于reactjs - MUI 自动完成 : How to prevent open on focus, 在输入更改时打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61258089/
我是一名优秀的程序员,十分优秀!