自动对焦输入组件 Antd

Autofocus Input component Antd

我正在尝试对位于 Drawer 组件上的 Input 组件进行自动对焦。我从 Antd 获取的所有组件。问题是自动对焦不会立即起作用,而是仅在 window 打开和关闭后才起作用。 Link 在 CodeSandbox 上 https://codesandbox.io/s/quizzical-morning-1nhi2v?file=/src/App.js

import './App.css';
import 'antd/dist/antd.css';
import {Button, Drawer, Input} from 'antd'
import React, { useState, createContext, useRef, useEffect } from 'react';

function App() {

  const  inputRef = useRef(true);
  const [visible, setVisible] = useState(false);

  const onClose = () =>{ //Close Drawer 
    setVisible(false);
  } 
  const open = () =>{ //Open Drawer and must be autofocus on Input
    setVisible(true);
  }
  useEffect(()=>{
    console.log(visible + 'useEffect');
    if(visible){
      inputRef.current.focus();
    }
  }, [visible])

  return (
    <div className="App">
      <Drawer visible={visible} onClose={onClose} autoFocus={true}>
        <Input ref={inputRef} ></Input>     
      </Drawer>     
      <Input ref={inputRef_}  ></Input>
      <Button onClick={open}>  Open</Button>
    </div>
  );
}

export default App; 

你可以试试这个。我测试了并且有效。

if (visible) {
  setTimeout(() => {
    inputRef.current.focus();
  }, [500]);
}