【问题标题】:How to set focus to input after the element stops moving?元素停止移动后如何将焦点设置为输入?
【发布时间】:2020-11-05 10:52:42
【问题描述】:

在 React 中有一个搜索栏,在我单击“打开”按钮后会显示。因为我使用 translateX 属性,所以搜索栏看起来很流畅。然后我想在这个搜索栏中的输入元素上使用 focus() 。我尝试使用参考。焦点出现了,但只要我按下按钮,它就会出现,并一直保持搜索栏从屏幕的一个部分移动到另一个部分(记住,这是因为我使用 translateX)。所以这一切都在我眼前。如何在屏幕上的搜索栏“到达目的地”后使焦点出现?我试过了

  if (props.visibleSearchBar) {
    ReactDOM.findDOMNode(inputRef.current).focus()
  } 

而不是

 if (props.visibleSearchBar) {
      inputRef.current.focus();
  } // same story


 const Search = (props) => {
     let inputRef = useRef(null);       
     if (props.visibleSearchBar) {
          inputRef.current.focus();
       }

     return (
       <div>
        <input ref={inputRef} />   
       </div >
     )

【问题讨论】:

    标签: reactjs focus


    【解决方案1】:

    您可以先禁用输入,然后在过渡结束后启用它。

    类似这样的东西,(未经测试)。

    const [disabled, setDisabledState] = useState(true)
    
    useEffect(() => {
    const callback = () => {
     setDisableState(false)
     inputRef.current.focus();
    }
    inputRef.current.addEventListener('transitionend', callback)
    
    return () => inputRef.current.removeEventListener('transitioned', callback)
    }, [])
    
    
     return (
           <div>
            <input ref={inputRef}  disabled={disabled}/>   
           </div >
         )
    

    【讨论】:

    • 很好!有效!顺便说一句,您忘记在“transitionend”一词中添加“n”。我还添加了另一个布尔状态来阻止这种转换无休止地发生。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2017-02-15
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多