ReactJS 和自动对焦
ReactJS and autofocus
我有一个带有 <input>
的 react-bootstrap
模态。我想在 <input>
上设置自动对焦属性
以下 工作正常,但在控制台中显示警告
<input type="text" autofocus='true' />
Warning: Invalid DOM property `autofocus`. Did you mean `autoFocus`?
以下选项不起作用,因为它们在打开模式时不会聚焦输入:
<input type="text" autoFocus='true' />
<input type="text" autoFocus={true} />
<input type="text" autoFocus />
推荐的自动对焦设置方式是什么。或者我应该如何使运行良好的示例的警告静音?
注意:这是 React 16.8.6
Refs
就是你想要的,
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount(){
this.myRef.current.focus();
}
<input type="text" ref={this.myRef} />
如果您使用的是 React Hooks,请将 useCallback()
添加到您的组件,并将 ref={callback}
添加到表单控件:
import React, { useCallback } from 'react'
function InputComponent() {
const autoFocus = useCallback(el => el ? el.focus() : null, [])
return <input type="text" ref={autoFocus} />
}
export default InputComponent
您也可以用 React Bootstrap FormControl
替换 <input>
。
如果您使用的是 React Hook,您可以编写自己的简单自动对焦 Hook:
import { useEffect, useState } from "react";
export const useAutoFocus = (inputId: string) => {
const [initialized, setInitialized] = useState(false);
useEffect(() => {
if(!initialized) {
document.getElementById("email").focus();
setInitialized(true);
}
});
};
并简单地使用例如
useAutoFocus("email")
在你的表单中。
我有一个带有 <input>
的 react-bootstrap
模态。我想在 <input>
以下 工作正常,但在控制台中显示警告
<input type="text" autofocus='true' />
Warning: Invalid DOM property `autofocus`. Did you mean `autoFocus`?
以下选项不起作用,因为它们在打开模式时不会聚焦输入:
<input type="text" autoFocus='true' />
<input type="text" autoFocus={true} />
<input type="text" autoFocus />
推荐的自动对焦设置方式是什么。或者我应该如何使运行良好的示例的警告静音?
注意:这是 React 16.8.6
Refs
就是你想要的,
constructor(props) {
super(props);
this.myRef = React.createRef();
}
componentDidMount(){
this.myRef.current.focus();
}
<input type="text" ref={this.myRef} />
如果您使用的是 React Hooks,请将 useCallback()
添加到您的组件,并将 ref={callback}
添加到表单控件:
import React, { useCallback } from 'react'
function InputComponent() {
const autoFocus = useCallback(el => el ? el.focus() : null, [])
return <input type="text" ref={autoFocus} />
}
export default InputComponent
您也可以用 React Bootstrap FormControl
替换 <input>
。
如果您使用的是 React Hook,您可以编写自己的简单自动对焦 Hook:
import { useEffect, useState } from "react";
export const useAutoFocus = (inputId: string) => {
const [initialized, setInitialized] = useState(false);
useEffect(() => {
if(!initialized) {
document.getElementById("email").focus();
setInitialized(true);
}
});
};
并简单地使用例如
useAutoFocus("email")
在你的表单中。