Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React-Formik:如何在不手动处理状态的情况下使用自定义onChange?_Javascript_Reactjs_Forms_Formik - Fatal编程技术网

Javascript React-Formik:如何在不手动处理状态的情况下使用自定义onChange?

Javascript React-Formik:如何在不手动处理状态的情况下使用自定义onChange?,javascript,reactjs,forms,formik,Javascript,Reactjs,Forms,Formik,我想利用Formik的内部状态处理(例如,初始值和通过字段名引用验证)。然而,当我尝试使用自定义onChange处理程序时,我似乎必须手动管理select标记的状态。有更好的方法吗 state = { selectedType: '' }; handleForm = (val) => { // do something else this.setState({selectedType: val}); }; <Formik initialValue

我想利用Formik的内部状态处理(例如,
初始值
和通过字段名引用验证)。然而,当我尝试使用自定义
onChange
处理程序时,我似乎必须手动管理select标记的状态。有更好的方法吗

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>
状态={
所选类型:“”
};
handleForm=(val)=>{
//做点别的
this.setState({selectedType:val});
};
{
常量错误={};
如果(!values.type){
errors.type=“选择一个值”;
}
返回错误;
}
}
提交={
(值)=>{
//正在得到未定义的。。。
console.log(values.type);
}
}
>
this.handleForm(event.target.value)}>
电子邮件
正文
电话
提交

当使用Formik管理表单时,我们应该避免使用状态来管理表单状态。默认情况下,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>

电子邮件
正文
电话

希望这有帮助-

您能提供更多关于如何使用自定义处理程序的详细信息吗?你能指出显示如何使用自定义处理程序的帮助程序的Formik文档吗?已经添加了一个沙盒链接,希望有帮助。也许你忘记保存了?沙盒示例没有任何相关代码。啊!!忘记保存-。