ReactJS 和自动对焦

问题描述 投票:0回答:4

我有一个带有

react-bootstrap
<input>
模态。我想在
<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

javascript reactjs bootstrap-modal react-bootstrap autofocus
4个回答
12
投票

如果您使用 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

您也可以将

<input>
替换为 React Bootstrap
FormControl


7
投票

Refs
就是你想要的,

constructor(props) {
    super(props);
    this.myRef = React.createRef();
}

componentDidMount(){
  this.myRef.current.focus();
}

<input type="text"  ref={this.myRef} />

0
投票

如果您正在使用反应钩子,您可以编写自己的简单自动聚焦钩子:

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

以您的形式。


0
投票

为什么我开始输入时会出现错误?但如果没有自动对焦或其替代方案,我的代码就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.