【发布时间】:2017-10-23 19:09:28
【问题描述】:
据我了解,点击输入框时应调用onFocus,而当其他内容成为焦点时应调用onBlur。
我的意图:我想调用一个函数,当通过点击激活时,它将.concat焦点输入框的消息字符串,但我无法获得onFocus 或 onBlur 工作。
根据我发现的搜索结果,这应该可以解决问题,但没有。
import React, { Component } from 'react'
class SocialPost extends Component {
state = {
message: this.props.socialPost.message,
focus: false
}
_onBlur() {
setTimeout(() => {
if (this.state.focus) {
this.setState({
focus: false,
});
}
}, 0);
}
_onFocus() {
if (!this.state.focus) {
this.setState({
focus: true,
});
}
}
render() {
return (
<div className='...'>
<div className='...'>
...
<input
onFocus={this._onFocus()}
onBlur={this._onBlur()}
type='text'
value={this.state.message}
onChange={...}/>
...
</div>
</div>
)
}
}
export default SocialPost
- 为什么在我单击/取消单击之前渲染组件时会调用
onFocus和onBlur? - 如何让
onFocus和onBlur工作,是否有其他方法可以专注于激活的输入框?
【问题讨论】:
-
为什么你的状态没有在
constructor函数中定义? -
@ArupRakshit 我看过很多没有在构造函数内部的示例,并且阅读它是不必要的。我一直在以一种方式与另一种方式来解决问题,所以我就这样离开了。像所有建议的那样添加
bind(this)之后,现在this.state从它被调用的位置是未定义的,我将添加构造函数并尝试以这种方式修复它 -
this在构造函数内部和构造函数外部都有特殊含义。 react方式使用state,使用ES2015类时需要在构造函数内部。
标签: javascript reactjs onchange onblur