我想在输入按键反应后清除textarea内容。但是,当输入键时,文本区域清除但输入键保持不变(换行)。我怎样才能解决这个问题?
constructor(){
this.state = { text : '' }
}
keypress(e){
if(e.key == 'Enter'){
this.setState({
send_message: ''
})
}
}
<textarea value={this.state.text} placeholder="Text" rows="1" className="form-textarea typing-area" onKeyPress={this.keypress.bind(this)}></textarea>
答案 0 :(得分:5)
当密钥为&#39;输入&#39;:
时,您可以使用event.preventDefault
class App extends React.Component {
constructor(props) {
super(props);
this.state = { text : '' }
this.handleChange = this.handleChange.bind(this);
this.keypress = this.keypress.bind(this);
}
handleChange(event) {
this.setState({text: event.target.value});
}
keypress(e){
if(e.key === 'Enter'){
e.preventDefault();
this.setState({
send_message: this.state.text,
text: '',
});
}
}
render() {
return (
<div>
<textarea
value={this.state.text}
placeholder="Text"
rows="1"
className="form-textarea typing-area"
onChange={this.handleChange}
onKeyPress={this.keypress}
/>
<pre>{JSON.stringify(this.state, null, 2)}</pre>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('app'));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
&#13;
答案 1 :(得分:0)
假设此文本区域供您的用户发表评论。我将文本区域放在表单元素内,并在您要在渲染上方定义的onSubmit
函数中放置handleSubmit
:
handleChange = (event) => {
this.setState({ comment: event.target.value });
};
handleSubmit = (event) => {
event.preventDefault();
this.setState({ comment: '' });
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<h4>Add a Comment</h4>
<textarea onChange={this.handleChange} value={this.state.comment} />
<div>
<button>Submit Comment</button>
</div>
</form>
);
}
handleSubmit
中的通知我添加了e.preventDefault()
,因为它是一个表单元素,HTML表单元素的默认行为是提交。然后,我添加了一个this.setState()
,该对象带有一个comment属性和一个空字符串值,以便您的文本区域可以清空。您可以将其命名为{ text: '' }
。
注意,我还有一个onChange
的{{1}}事件处理程序。 {this.handleChange}
收到此handleChange
对象,并且您的event
状态或在我的情况下text
状态的新值将来自comment
。
在开发此组件时,我还将一直对其进行测试。因此,请考虑进行以下测试:查找textarea元素,模拟更改事件,提供伪造的事件对象,强制组件进行更新,然后断言文本区域确实更改了其值。在这种测试中,您需要手动设置event.target.value
值。