reactjs - React useRef 不适用于 Material UI TextField
问题描述
为什么 useRef 不能与 Material UI TextField 一起使用,但可以与传统的 html 输入元素一起使用?
用户界面:
我有一个 Textfield 输入元素,在它上面我有一个按钮列表(来自拉丁字母的字母,特殊字符)。我可以在组件第一次渲染时聚焦输入栏,但是如果我点击输入上方的按钮之一,焦点不会回到输入栏上。
到目前为止我尝试了什么
const Search = (props) => {
const [searchTerm, setSearchTerm] = useState("");
const inputRef = useRef(null);
const handleLatinButton = (letter) => {
inputRef.current.focus();
setSearchTerm(searchTerm + letter);
};
const handleSubmit = (e) => {
e.preventDefault();
History.push("/?q=" + searchTerm);
props.onFormSubmit(searchTerm, optionValue);
setSearchTerm("");
};
useEffect(() => {
const params = new URLSearchParams(location.search);
const q = params.get("q");
setSearchTerm(q);
inputRef.current.focus();
}, []); // Am I missing something here in the array?
JSX
<Button letter="č" handleLatinButton={handleLatinButton} />
<Button letter="ḍ" handleLatinButton={handleLatinButton} />
...
<form onSubmit={handleSubmit}>
<TextField
fullWidth
label="Search..."
value={searchTerm}
onChange={handleChange}
ref={inputRef}
autoFocus="true"
InputProps={{
endAdornment: (
<InputAdornment position="start">
<IconButton type="submit">
<SearchIcon />
</IconButton>
</InputAdornment>
),
}}
/>
</form>
如果我用输入替换 TextField,则在单击其中一个拉丁按钮后焦点有效。
解决方案
推荐阅读
- android - 为什么我的应用程序能够在较新的设备上运行,但不能在较旧的设备上运行(向后兼容 build.gradle 问题)?
- c++ - 将静态数组复制到动态数组c ++
- javascript - 在 Bootstrap-Vue 范围滑块上需要仅拖动
- postgresql - 无法连接到现有的本地 postgresql 数据库,密码验证失败
- tree - 森林包:跳过空节点
- javascript - 如何在 Gerrit 的变更集页面中找到动态元素
- python - 将字符串中的嵌套列表转换回嵌套列表
- javascript - UseRef 选择实际的父组件
- c# - MStest 所有测试用例都被跳过 .net 应用程序
- node.js - 错误:为构建模式提供的类型之一缺少名称