【问题标题】:React Formik: How to use custom onChange without manually handling state?React Formik:如何在不手动处理状态的情况下使用自定义 onChange?
【发布时间】:2020-11-10 15:43:43
【问题描述】:

我想利用 Formik 的内部状态处理(例如 initialValues 和通过字段名称引用验证)。但是,当我尝试使用自定义 onChange 处理程序时,我似乎必须手动管理选择标记的状态。有没有更好的方法来做到这一点?

state = {
    selectedType: ''
};

handleForm = (val) => {
    // do something else
    this.setState({selectedType: val});
};


<Formik
    initialValues={{
        type: ''
    }}
    
    validate={
        (values) => {
            const errors = {};
            
            if (!values.type) {
                errors.type = "Select a value";
            }
            
            return errors;
        }
    }

    onSubmit={
        (values) => {
            // getting undefined...
            console.log(values.type);
        }
    }
>
    <Form>
        <Field name="type" as="select" value={this.state.selectedType} onChange={(event) => this.handleForm(event.target.value)}>
            <option disabled></option>
            <option value="Email">Email</option>
            <option value="Text">Text</option>
            <option value="Phone">Phone</option>
        </Field>

        <button type="submit">Submit</button>
    </Form>
</Formik>

【问题讨论】:

    标签: javascript reactjs forms formik


    【解决方案1】:

    在使用 Formik 管理 Forms 时,我们应该避免使用 state 来管理 Form 状态。 Formik 默认提供处理 onChange、focus 和 blur 事件的助手。

    Formik 提供的字段将为您处理更改事件。

    <Field id="type" name="type" as="select">
          <option disabled></option>
          <option value="Email">Email</option>
          <option value="Text">Text</option>
          <option value="Phone">Phone</option>
    </Field>
    

    希望这会有所帮助 - sandbox example

    【讨论】:

    • 您能否提供更多关于它如何与自定义处理程序一起使用的详细信息?您能否指出 Formik 文档显示如何使用自定义处理程序的帮助程序?
    • 添加了一个带有示例的沙盒链接,希望对您有所帮助。
    • 也许你忘了保存?沙盒示例没有任何相关代码。
    猜你喜欢
    • 2019-11-20
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多