在Formik组件之外处理Formik表单

时间:2019-12-26 13:58:12

标签: reactjs react-native

我有一个formik表格,如下所示。我可以在formik组件内提交表单。但是我怎么能在formik组件之外(在此示例中,在页脚内部)提交它呢。

Formik网址:Click here

特别是,我如何在handleChange, values, handleSubmit, errors,isValid,touched, handleBlur, isSubmitting,组件之外访问此值Formik

我正在react-native中进行此操作,但是我猜想react的概念会有所帮助,特别是在使用useRef等时。在线使用ref的示例很少,但都无效。

<View>
    <Formik
        onSubmit={async values => {
            this.handleSubmit(values);
            await new Promise(resolve => setTimeout(resolve, 1000));
            console.warn(values);
        }}
        validationSchema={validationSchema}>
        {({
        handleChange,
        values,
        handleSubmit,
        errors,
        isValid,
        touched,
        handleBlur,
        isSubmitting,
        }) => (
        <View>
            <Form>
                <Text>First Name</Text>
                <TextInput
                    name="first_name"
                    value={values.first_name}
                    onChangeText={handleChange('first_name')}
                />
                {errors.first_name ? (
                <Text>{errors.first_name}</Text>/>
                ) : (
                    <></>
                )}
                <Button onPress={handleSubmit}>
                    <Text>Submit</Text>
                </Button>
            </Form>
        </View>
        )}
    </Formik>
    <Footer>
        <Button>Submit</Button>
    </Footer>
</View>

1 个答案:

答案 0 :(得分:1)

在创建可重用的弹出窗口并在弹出模板中具有保存按钮以及在弹出内容中包含formik表单时,我遇到了相同的问题(因此,由于页脚已在任何弹出窗口中重复使用,因此我无法将按钮放在表单内)。

我通过在表单中​​的提交按钮上添加一个ref并用css隐藏该按钮,然后在单击所需的提交按钮时实用地触发了对隐藏的提交按钮的点击来解决此问题。

也许不是最干净的解决方案,但它对我有用。

这是一个基本样本

<Formik>
    ....
    <Field>
    <Field>
    ...
    <button type="submit" style={{display:"none"}}  ref={this.submitButton}/> 
</Formik>

<div className="ftr">
    <button onClick={() => this.submitButton.current.click()}>Save</button>
</div>

希望这会有所帮助