[英]React.js - Clear controlled textarea initial value on focus
在此示例中,对于受控文本区域,它显示了如何设置初始值,然后更新onChange值。 首次聚焦该字段时,如何清除此初始值,而又不清除用户的任何其他输入。
设置初始值:
this.state = {
value: 'Please write an essay'
};
我想你会做类似的事情:
<textarea value={this.state.value} onChange={this.handleChange} onFocus={this.handleFocus} />
然后有:
handleFocus(event) {
this.setState({value: ''});
}
虽然这不起作用。 有什么建议吗?
Codepen: https ://codepen.io/anon/pen/KZVeWB ? editors = 0010
您错过了在constructor
函数中bind
handleFocus
方法的方法
this.handleFocus = this.handleFocus.bind(this)
如果将函数传递给组件(例如事件处理程序),则“ this”捕获将丢失。 当textarea调用事件处理程序时,“ this”将不引用定义该函数的组件。 我认为它实际上将引用事件处理程序功能本身。
解决此问题的常用方法是将“ this”绑定到事件处理程序:
onFocus={this.onFocus.bind(this)}
如果您使用的是ES7,也可以将方法定义为lambda成员变量:
class MyComponnet {
onFocus = (e) => { ... }
render() {
return <textarea onFocus={this.onFocus} />
}
}
之所以可行,是因为js中的lambda会自动捕获周围的所有内容。 看起来有点干净。
另外,您应该考虑改用占位符属性: https : //www.w3schools.com/tags/att_textarea_placeholder.asp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.