reactjs - React TypeScript onSubmit e.preventDefault() fungerer ikke
Jeg lager en enkel bruker-søkeapp ved å bruke React og TypeScript. Jeg har et grunnleggende skjema med en tekstboks for å søke etter brukere og en knapp som sender inn søket. Men e.preventDefault()-metoden i min onSubmit-metode ser ikke ut til å fungere. Når jeg sender inn, oppdateres hele appen. Faktisk kan det være at onSubmit ikke engang blir kalt i det hele tatt.
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>
);
}
Noen forslag? Takk!
Svar #1
Du legger til onSubmit på feil sted.
Du bør legge til i form, ikke i knappen.
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>
);
}
Hvis du ser på eksemplet i dokumentasjonen, vil du se at de legger det til i form.
*Husk at for å utløse form's onSubmit, må din input/button ha type="submit"
Svar #2
Du kan enkelt gjøre dette :-
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>
);
}
