代码之家  ›  专栏  ›  技术社区  ›  sosick

在react中重置表单输入值

  •  1
  • sosick  · 技术社区  · 6 年前

    我想创建一个函数,使用WITH可以重置表单输入中的值而不提交。我尝试在应用程序组件(resetformfields)中创建该函数,并将其传递给props以形成组件。当我想在submit(e.target.reset())上执行此操作时,它很简单,但是当我必须在表单之外的其他元素上不提交它时,它就卡住了。我可以在不向State添加这些值的情况下做到这一点吗?

    应用程序:

    class App extends Component {
    
    state = {
        people: [],
        formMessages: [],
        person: null
    };
    
    handleFormSubmit = e => {
    
        e.preventDefault();
    
        const form = e.target;
        const name = form.elements["name"].value;
        const username = form.elements["username"].value;
    
        this.addPerson(name, email);
        form.reset();
    };
    
    resetFormFields = () => {
        return;
    }
    
    render() {
    
        return (
            <div className="App">
                <Form formSubmit={this.handleFormSubmit} 
                      reset={this.resetFormFields} />
            </div>
        );
    }
    

    形式:

        const Form = props => (
      <form className={classes.Form}
        id="form"
        onSubmit={props.formSubmit}>
    
        <input autoFocus
            id="name"
            type="text"
            defaultValue=""
            placeholder="Name..."
        />
        <input
            id="email"
            type="text"
            defaultValue=""
            placeholder="Email..."
        />
        <Button
            btnType="Submit"
            form="form"
            type='submit'>
            Submit
        </Button>
        <label onClick={props.reset}>Reset fields</label>
    </form> );
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Balanced02    6 年前

    您需要通过传递存储在您的 state 然后你只需要重置状态值,你的组件值就会重置。

    请检查下面的示例

    handleInputChange = (e) => {
        let { name, value } = e.target;
        this.setState({
          ...this.state,
          inputs: {
          [name]: value
          }
    });
    

    }

    您的组件现在看起来像

    <input name='fullName' value={this.state.inputs.fullName} onChange={this.handleInputChange} />
    

    您的重置功能只会清除状态,输入字段将为空,因为它是通过 状态

    resetInputFields = () => {
       this.setState({ inputs: {} })
    }
    
        2
  •  1
  •   stackoverfloweth    6 年前

    您应该根据组件状态提供设置输入值,然后只更新组件状态

    class App extends Component {
    
    state = {
        people: [],
        formMessages: [],
        person: null,
        name: "",
        email: "",
    };
    
    updateState = (newState) => {
        this.setState(newState);
    }
    
    handleFormSubmit = e => {
    
        e.preventDefault();
    
        this.addPerson(this.state.name, this.state.email);
        form.reset();
    };
    
    resetFormFields = () => {
        this.setState({name:"", email: ""});
    }
    
    render() {
    
        return (
            <div className="App">
                <Form formSubmit={this.handleFormSubmit}  updateState={this.updateState}
                      reset={this.resetFormFields} email={this.state.email} name={this.state.name} />
            </div>
        );
    }
    

    然后

    const Form = props => (
      <form className={classes.Form}
        id="form"
        onSubmit={props.formSubmit}>
    
        <input autoFocus
            id="name"
            type="text"
            defaultValue=""
            value={this.props.name}
            onChange={(e) => this.props.updateState({name: e.target.value})}
            placeholder="Name..."
        />
        <input
            id="email"
            type="text"
            defaultValue=""
            value={this.props.email}
            onChange={(e) => this.props.updateState({email: e.target.value})}
            placeholder="Email..."
        />
        <Button
            btnType="Submit"
            form="form"
            type='submit'>
            Submit
        </Button>
        <label onClick={props.reset}>Reset fields</label>
    </form> );