【发布时间】:2017-03-18 20:16:19
【问题描述】:
我有一个带有文本输入的 React (15.3.2) 组件。
(我在这里说“渲染”的地方实际上是渲染或取消隐藏;我都试过了。)
当输入元素被模糊时,我会渲染一个带有文本输入的新组件。
我想给新的文本输入焦点。
我试过componentDidMount、componentWillUpdate和componentDidUpdate;我试过命名和功能refs;我试过 react-dom。
聚焦本身可以工作,例如,一旦它被渲染,如果我点击初始输入,焦点就会转到新输入(这是一个错误,但与聚焦相比,微不足道)。
第一个输入有一个onBlur,它设置用于告诉第二个输入渲染与否的状态。
在那个模糊处理程序中,我尽我所能停止事件。
当我跳出第一个元素时,我已经“过去”了新渲染的元素,例如,我当前裸设计中的浏览器标签栏——我猜新元素还没有被渲染?
class SecondInput extends Component {
componentDidUpdate = (prevProps, prevState) => {
if (!this.props.hidden) this._input.focus()
}
render = () =>
<input type="text" hidden={this.props.hidden} ref={(c) => this._input = c}
}
class NewItem extends Component {
state = { itemEntered: false }
itemBlurred = (e) => {
e.preventDefault()
e.stopPropagation()
this.setState({ itemEntered: true })
}
render = () =>
<div>
Item: <input type="text" onBlur={this.itemBlurred} />
<SecondInput hidden={!this.state.itemEntered} />
</div>
}
有什么想法或提示吗?我必须相信这是显而易见的事情,因为这肯定一直在发生。
我也对任何其他形式的组件层次结构持开放态度,例如,如果我需要一个容器来以某种方式包装所有这些东西,那很好。
反应 15.3.2
【问题讨论】:
标签: javascript reactjs