我正在尝试实现一个非常简单的用例,即UI特性,其中:
1.有一个标签,里面有一些内容
1.如果单击,文本输入会将其替换为可用标注的内容
1.用户可以编辑内容
1.按Enter键时,输入将隐藏,标注将返回更新的内容
我终于可以得到所有正确的(事实上与MongoBD后端,redux等),唯一的事情,我永远不能做(支付一整天的谷歌搜索和阅读S.O.F类似的职位)是这样的:
当我的文本输入出现时,我无法将焦点转移到它!首先我累了这样:
<div className={((this.state.toggleWordEdit) ? '' : 'hidden')}>
<input id={this.props.word._id} className="form-control"
ref="updateTheWord"
defaultValue={this.state.word}
onChange={this.handleChange}
onKeyPress={this.handleSubmit}
autoFocus={this.state.toggleWordEdit}/></div>
<div className={((this.state.toggleWordEdit) ? 'hidden' : '')}>
<h3 onClick={this.updateWord}>
{this.state.word}</h3>
</div>
但是autoFocus肯定不起作用(我“猜”是因为表单被呈现了,但是处于隐藏状态,使得autoFocus无用)。
接下来,我尝试在我的this.updateWor,我在谷歌和S.O.F.上找到的许多建议:
this.refs.updateTheWord.focus();
再加上类似的建议都不起作用。我还试图愚弄React只是为了看看是否在所有我可以做些什么!我用真实的的DOM:
const x = document.getElementById(this.props.word._id);
x.focus();
也不管用。有一件事我甚至无法理解,无法用语言表达,那就是这样一个建议:having ref as a method (I "guess")我甚至没有尝试它,因为我有多个这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何才能获得的值!
所以,你能不能给予一个想法,帮助我理解,在情况下,我不使用一个窗体(因为我需要一个单一的输入框来取代标签)我怎么可以设置它的焦点时,它的CSS( Bootstrap )类正在失去'隐藏'请?
7条答案
按热度按时间rkue9o1l1#
你使用refs的方式不是最好的方式,或者它不再是最好的实践。尝试一些像这样的事情
从React 16.3起,您可以使用**
React.createRef()
**API从React 18.xx以上版本,您可以使用**
useRef
**挂钩8dtrkrch2#
只需将自动对焦属性添加到
input
。(* 当然,在JSX
中它是autoFocus
*)46qrfjad3#
使用焦点挂钩
获取更完整的click here演示。
tpxzln5u4#
除了前面的答案之外,我还添加了
setTimeout
以使其工作其中,
searchInput
是输入的jsx refhandleClick()
是任何元素的onClick
处理程序bihw5rsg5#
@BenCarp typescript 中的回答
将
inputRef
传递给input
,然后调用setFocus
将焦点设置到它。33qvvth16#
每次更新组件时使用
componentDidUpdate
方法wz1wpwve7#
您可以使用“useRef”钩子并引用输入控件,然后使用
reference.current.focus()