为了账号安全,请及时绑定邮箱和手机立即绑定

React userref 未将焦点状态添加到字段

React userref 未将焦点状态添加到字段

叮当猫咪 2023-11-12 14:47:35
我一直在尝试为此找到解决方案,我想将焦点状态添加到我的输入字段中。但它似乎不起作用:const textareaRef = useRef<HTMLInputElement>(null);...const handleClick = () => {        if (textareaRef.current) {            alert('Field clicked');            textareaRef.current.focus();            textareaRef.current.click();        }    };...<input     ref={textareaRef}     onClick={handleClick}     onFocus={(e) => e.persist()}     spellCheck="false"/>这是不行的,主要原因是要显示手机键盘。
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我无法在桌面浏览器上重现该错误。录屏时用的是什么浏览器?


function App() {

  const textareaRef = React.useRef();

  const handleClick = () => {

    if (textareaRef.current) {

        console.log('Field clicked');

        textareaRef.current.focus();

    }

  };


  return (

    <div>

      <div onClick={handleClick}>click me to focus input</div>

      <input

       ref={textareaRef}

       onFocus={(e) => e.persist()}

      />

    </div>

  )

}


ReactDOM.render(

  <App />,

  document.getElementById('root')

)

<script src="https://unpkg.com/react@16.14.0/umd/react.production.min.js"></script>

<script src="https://unpkg.com/react-dom@16.14.0/umd/react-dom.production.min.js"></script>


<div id="root"></div>


查看完整回答
反对 回复 2023-11-12
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以在useEffect() Hook 中执行此操作。下面的组件模拟了您的场景。当组件加载时,我使 focus() 出现在输入上。


import React, { useEffect, useRef } from 'react';



const UseRefBasics = () => {

  const refContainer = useRef(null);


  const handleSubmit = (e) => {

    e.preventDefault();

    console.log(refContainer.current.value);

  };

  useEffect(() => {

    console.log(refContainer.current);

    refContainer.current.focus();

  });


  return (

    <>

      <form className='form' onSubmit={handleSubmit}>

        <div>

          <input type='text' ref={refContainer} />

        </div>

        <button type='submit'>submit</button>

      </form>

    </>

  );

};


export default UseRefBasics;

这是我给出的一般场景。您可以使用useEffect()并在状态更新时通过提供另一个参数useEffect(()=>{},[state1])或以您需要的任何方式获得焦点。


查看完整回答
反对 回复 2023-11-12
  • 2 回答
  • 0 关注
  • 54 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信