使用 React 提交后清除输入字段
Clearing an input field after submit with React
我正在用 React 制作一个评论表单。我几乎已经构建了我想要的东西,除了这个小问题,在我提交表单后我无法清除我的输入值。即使提交后,我输入的内容仍保留在输入字段中。
我的代码:
CommentsIndex.js
class CommentsIndex extends React.Component {
constructor(props) {
super(props);
this.state = {
url: this.props.url,
comment: '',
};
this.onSubmit2 = this.onSubmit2.bind(this);
}
loadCommentsFromServer() {
$.ajax({
// ajax call working fine
});
}
onSubmit2(value) {
const url = this.props.url;
$.ajax({
url: url,
dataType: 'text',
type: 'POST',
cache: false,
data: {
comment: value
},
success: (data) => {
this.loadCommentsFromServer();
},
error: (xhr, status, err) => {
console.error(url, status, err.toString());
},
});
}
componentDidMount() {
this.loadCommentsFromServer();
}
render() {
return (
<div>
<NewComment onSubmit1={this.onSubmit2} />
<Comments comments={this.state.comments} />
</div>
);
}
}
export default CommentsIndex;
NewComment.js
class NewComment extends React.Component {
constructor(props) {
super(props);
this.state = {
comment: ''
};
this.getInput = this.getInput.bind(this);
this.onSubmit = this.onSubmit.bind(this);
}
getInput(e) {
this.setState({
comment: e.target.value
});
}
onSubmit() {
this.props.onSubmit1(this.state.comment);
}
render() {
return (
<div>
<input className="comment-field" onChange={this.getInput} />
<input className="comment-submit" type="submit" value="SUBMIT" onClick={this.onSubmit} />
</div>
);
}
}
export default NewComment;
我尝试在我的 onSubmit2()
中的 success: (data) => {}
中添加 this.setState({ value: '' })
,但没有成功。
如有任何建议,我们将不胜感激。提前致谢!
ajax 请求成功后,将状态设置为“”,如下所示:
this.setState({
comment: ''
});
并将状态绑定到输入字段,如下所示:
<input value={this.state.comment} className="comment-field" onChange={this.getInput} />
在下面添加像 ref={(input)=>this.commentInput=input}
这样的引用:
<div>
<input ref={(input)=>this.commentInput=input} className="comment-field" onChange={this.getInput} />
<input className="comment-submit" type="submit" value="SUBMIT" onClick={this.onSubmit} />
</div>
并在您的 onSubmitMethod 中执行如下代码:
onSubmit() {
this.props.onSubmit1(this.state.comment);
this.commentInput.value='';
}
回调props后设置值''
如果输入元素在form
内,则
form.reset()
可用于在提交时重置所有表单组件。
class App extends React.Component {
constructor(props) {
super(props);
this.onSubmit = this.onSubmit.bind(this);
}
onSubmit(event) {
event.preventDefault();
const form = event.target;
const name = event.target.name.value;
console.log(name);
form.reset();
}
render() {
return (
<form onSubmit={this.onSubmit}>
<input type="text" name="name" placeholder="Name" />
<button>Submit</button>
</form>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>
我正在用 React 制作一个评论表单。我几乎已经构建了我想要的东西,除了这个小问题,在我提交表单后我无法清除我的输入值。即使提交后,我输入的内容仍保留在输入字段中。
我的代码:
CommentsIndex.js
class CommentsIndex extends React.Component {
constructor(props) {
super(props);
this.state = {
url: this.props.url,
comment: '',
};
this.onSubmit2 = this.onSubmit2.bind(this);
}
loadCommentsFromServer() {
$.ajax({
// ajax call working fine
});
}
onSubmit2(value) {
const url = this.props.url;
$.ajax({
url: url,
dataType: 'text',
type: 'POST',
cache: false,
data: {
comment: value
},
success: (data) => {
this.loadCommentsFromServer();
},
error: (xhr, status, err) => {
console.error(url, status, err.toString());
},
});
}
componentDidMount() {
this.loadCommentsFromServer();
}
render() {
return (
<div>
<NewComment onSubmit1={this.onSubmit2} />
<Comments comments={this.state.comments} />
</div>
);
}
}
export default CommentsIndex;
NewComment.js
class NewComment extends React.Component {
constructor(props) {
super(props);
this.state = {
comment: ''
};
this.getInput = this.getInput.bind(this);
this.onSubmit = this.onSubmit.bind(this);
}
getInput(e) {
this.setState({
comment: e.target.value
});
}
onSubmit() {
this.props.onSubmit1(this.state.comment);
}
render() {
return (
<div>
<input className="comment-field" onChange={this.getInput} />
<input className="comment-submit" type="submit" value="SUBMIT" onClick={this.onSubmit} />
</div>
);
}
}
export default NewComment;
我尝试在我的 onSubmit2()
中的 success: (data) => {}
中添加 this.setState({ value: '' })
,但没有成功。
如有任何建议,我们将不胜感激。提前致谢!
ajax 请求成功后,将状态设置为“”,如下所示:
this.setState({
comment: ''
});
并将状态绑定到输入字段,如下所示:
<input value={this.state.comment} className="comment-field" onChange={this.getInput} />
在下面添加像 ref={(input)=>this.commentInput=input}
这样的引用:
<div>
<input ref={(input)=>this.commentInput=input} className="comment-field" onChange={this.getInput} />
<input className="comment-submit" type="submit" value="SUBMIT" onClick={this.onSubmit} />
</div>
并在您的 onSubmitMethod 中执行如下代码:
onSubmit() {
this.props.onSubmit1(this.state.comment);
this.commentInput.value='';
}
回调props后设置值''
如果输入元素在form
内,则
form.reset()
可用于在提交时重置所有表单组件。
class App extends React.Component {
constructor(props) {
super(props);
this.onSubmit = this.onSubmit.bind(this);
}
onSubmit(event) {
event.preventDefault();
const form = event.target;
const name = event.target.name.value;
console.log(name);
form.reset();
}
render() {
return (
<form onSubmit={this.onSubmit}>
<input type="text" name="name" placeholder="Name" />
<button>Submit</button>
</form>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>