据我了解,单击输入框时应调用onFocus
,当其他内容成为焦点时应调用onBlur
。
我的意图:我想调用一个函数,当点击激活时,它将.concat
聚焦输入框的消息字符串,但我可以&#39 ;让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
正常工作,还有另一种方法可以专注于激活的输入框吗?答案 0 :(得分:2)
更改
onFocus={this._onFocus()}
onBlur={this._onBlur()}
到
onFocus={this._onFocus}
onBlur={this._onBlur}
或
onFocus={this._onFocus.bind(this)}
onBlur={this._onBlur.bind(this)}
答案 1 :(得分:2)
改变这个:
onFocus={this._onFocus()}
onBlur={this._onBlur()}
到此:
onFocus={this._onFocus}
onBlur={this._onBlur}
2.你不能像那样声明组件的状态。它必须在构造函数中完成。另外,如果你想引用SocialPost的this
,你必须绑定它。 Imo最好的地方就是在构造函数中。
整个代码应如下所示:
import React, { Component } from 'react'
class SocialPost extends Component {
constructor (props) {
super(props)
this.state = {
message: props.socialPost.message,
focus: false
}
this._onBlur = this._onBlur.bind(this)
this._onFocus = this._onFocus.bind(this)
}
_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
答案 2 :(得分:1)
您正在执行此方法
<input
onFocus={this._onFocus()}
onBlur={this._onBlur()}
type='text'
value={this.state.message}
onChange={...}/>
它应该没有括号。
<input
onFocus={this._onFocus.bind(this)}
onBlur={this._onBlur.bind(this)}
type='text'
value={this.state.message}
onChange={...}/>
编辑:
并添加.bind(this)
答案 3 :(得分:1)
<input onFocus={this._onFocus.bind(this)} onBlur={this._onBlur.bind(this)} />
如果你想在函数
中使用THIS,它应该是怎样的