如何将焦点设置在material-ui TextField
组件上?
componentDidMount() {
ReactDom.findDomNode(this.refs.myControl).focus()
}
Run Code Online (Sandbox Code Playgroud)
我试过上面的代码,但它不起作用:(
小智 23
您可以使用该autoFocus
属性.
<TextField value="some value" autoFocus />
Run Code Online (Sandbox Code Playgroud)
atb*_*khi 11
如果您使用的是material-ui TextField 和react 功能组件,您可以在TextField 组件中传递inputRef。这里的技巧是 if 条件if(input != null)
。
<TextField
variant="filled"
inputRef={(input) => {
if(input != null) {
input.focus();
}
}}
/>
Run Code Online (Sandbox Code Playgroud)
这是一个适合您的工作示例。CodeSandBox-Material-ui-TextFieldFocus
autoFocus
也没有为我工作,也许因为这是一个在顶级组件加载时没有安装的组件.为了让它发挥作用,我不得不做更多令人费解的事情:
function AutoFocusTextField(props) {
const inputRef = React.useRef();
React.useEffect(() => {
const timeout = setTimeout(() => {
inputRef.current.focus();
}, 100);
return () => {
clearTimeout(timeout);
};
}, []);
return <TextField inputRef={inputRef} {...props} />;
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于某种原因,没有它就无法工作setTimeout
.有关详细信息,请参阅https://github.com/callemall/material-ui/issues/1594.
这将在每次渲染时聚焦组件。我尝试过的其他解决方案仅在初始时聚焦该元素。
const inputRef = React.useRef<HTMLInputElement>();
useEffect(() => {
inputRef.current?.focus();
}, [inputRef.current]);
const setTextInputRef = (element: HTMLInputElement) => {
inputRef.current = element;
};
return (
<TextField
inputRef={setTextInputRef}
/>
Run Code Online (Sandbox Code Playgroud)
对于React 16.8.6,您应该使用inputRef
TextField 的属性来设置焦点。我尝试过ref
财产,但是行不通。
<TextField
inputRef={input => input && input.focus()}
/>
Run Code Online (Sandbox Code Playgroud)
inputRef
:使用此属性可将ref回调传递给本机输入组件。
将此属性添加到您的TextField
组件中:
inputRef={(input) => input?.focus()}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13356 次 |
最近记录: |