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")

在你的表单中。