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>
    );
  }

Relaterte artikler