reactjs - React TypeScript onSubmit e.preventDefault() nu funcționează
Construiesc o aplicație simplă de căutare a utilizatorilor folosind React și TypeScript. Am un formular de bază cu un câmp de text pentru a căuta utilizatori și un buton de input care trimite căutarea. Dar metoda e.preventDefault() din metoda mea onSubmit nu pare să funcționeze. Când trimit formularul, întreaga aplicație se reîmprospătează. De fapt, este posibil ca onSubmit să nu fie apelat deloc.
private handleSubmit = (e: React.FormEvent<HTMLInputElement>) => {
e.preventDefault();
this.props.searchUsers(this.state.text);
this.setState({text: ''});
}
private handleChange = (e: React.FormEvent<HTMLInputElement>) => {
this.setState({text: e.currentTarget.value});
}
public render() {
return (
<div>
<form className="form">
<input
type="text"
name="text"
value={this.state.text}
placeholder="Search Users..."
onChange={this.handleChange}
/>
<input
type="submit"
value="search"
className="btn btn-dark btn-block"
onSubmit={this.handleSubmit}
/>
</form>
</div>
);
}
Aveți sugestii? Mulțumesc!
Răspuns #1
Adaugi onSubmit în locul greșit.
Ar trebui să adaugi în formular, nu în buton.
public render() {
return (
<div> // \/ added here
<form className="form" onSubmit={this.handleSubmit}>
<input
type="text"
name="text"
value={this.state.text}
placeholder="Search Users..."
onChange={this.handleChange}
/>
<input // removed from the button
type="submit"
value="search"
className="btn btn-dark btn-block"
/>
</form>
</div>
);
}
Dacă te uiți la exemplul din documentație, vei vedea că îl adaugă în form.
*Rețineți că pentru a declanșa onSubmit al form-ului, input/button trebuie să aibă type="submit"
Răspuns #2
Poți face pur și simplu asta :-
private handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
this.props.searchUsers(this.state.text);
this.setState({text: ''});
}
private handleChange = (e: React.FormEvent<HTMLInputElement>) => {
this.setState({text: e.currentTarget.value});
}
public render() {
return (
<div>
<form className="form" onSubmit={(e) =>this.handleSubmit(e)}>
<input
type="text"
name="text"
value={this.state.text}
placeholder="Search Users..."
onChange={this.handleChange}
/>
<input
type="submit"
value="search"
className="btn btn-dark btn-block"
/>
</form>
</div>
);
}
