【发布时间】:2017-08-26 00:18:28
【问题描述】:
我正在尝试实现一个非常简单的用例,一个 UI 功能,其中:
- 有一个标签,里面有一些内容
- 如果单击,文本输入将其替换为可用标签的内容
- 用户可以编辑内容
- 按下回车后,输入隐藏,标签返回更新内容
我终于可以完全正确(实际上是使用 MongoBD 后端、redux 等),而我唯一不能做的事情(花一整天时间在谷歌上搜索和阅读 SOF 类似帖子)是这样的:
当我的文本输入出现时,我无法将焦点转移到它!首先我是这样累的:
<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 中尝试了很多我在 google 和 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(引导)类时,我如何设置它的焦点请问是丢失“隐藏”吗?
【问题讨论】:
-
这行得通吗? c.focus()} />
-
在这种情况下,一旦输入被渲染,由 ref 定义的回调将被执行,并传入对当前元素的引用。您可以使用此回调函数来定义对 dom 节点的引用 - 例如 ref={c => this.refs.c = c}。然后,你就可以正常使用 this.refs 了(只要确保它是事先定义好的)。