首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Formik在<Formik />外部使用submitForm

React Formik在<Formik />外部使用submitForm
EN

Stack Overflow用户
提问于 2018-03-28 10:18:25
回答 6查看 61.6K关注 0票数 49

当前行为

代码语言:javascript
复制
(this.form = node)}
    onSubmitCallback={this.onSubmitCallback}
    render={formProps => {
        const fieldProps = { formProps, margin: 'normal', fullWidth: true, };
        const {values} = formProps;
        return (
            
                
                    

                    

                    
                
                Login
            
        );
    }}
/>

我正在尝试这个解决方案

https://github.com/jaredpalmer/formik/issues/73#issuecomment-317169770

但它总是返回给我Uncaught TypeError: _this.props.onSubmit is not a function

当我试着console.log(this.form)有submitForm函数。

有什么解决方案吗伙计们?

Formik版本:最新- React版本: v16 - OS: Mac

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-10-04 00:58:53

对于那些想知道通过React钩子有什么解决方案的人来说:

Formik 2.x,如中所述这个答案

代码语言:javascript
复制
// import this in the related component
import { useFormikContext } from 'formik';

// Then inside the component body
const { submitForm } = useFormikContext();

const handleSubmit = () => {
  submitForm();
}

请记住,解决方案仅适用于组件内部

Formik组件,因为它使用上下文API。如果出于某种原因,您希望从外部组件或从实际使用Formik的组件手动提交,则实际上仍然可以使用innerRef道具。

TLDR;如果您要提交的组件是或的子级,则此上下文answers的作用就像是一个咒语withFormik()组件,否则使用innerRef请回答下面的问题。

Formik 1.5.x+

代码语言:javascript
复制
// Attach this to your 
const formRef = useRef()

const handleSubmit = () => {
  if (formRef.current) {
    formRef.current.handleSubmit()
  }
}

// Render
票数 77
EN

Stack Overflow用户

发布于 2018-11-20 07:05:28

你可以绑定formikProps.submitForm(Formik的程序性提交)到父组件,然后触发来自父组件的提交:

代码语言:javascript
复制
import React from 'react';
import { Formik } from 'formik';

class MyForm extends React.Component {
    render() {
        const { bindSubmitForm } = this.props;
        return (
             {
                    console.log({ values });
                    setSubmitting(false);
                }}
            >
                {(formikProps) => {
                    const { values, handleChange, handleBlur, handleSubmit } = formikProps;

                    // bind the submission handler remotely
                    bindSubmitForm(formikProps.submitForm);

                    return (
                        
                            
                        
                    )
                }}
            
        )
    }
}

class MyApp extends React.Component {

    // will hold access to formikProps.submitForm, to trigger form submission outside of the form
    submitMyForm = null;

    handleSubmitMyForm = (e) => {
        if (this.submitMyForm) {
            this.submitMyForm(e);
        }
    };
    bindSubmitForm = (submitForm) => {
        this.submitMyForm = submitForm;
    };
    render() {
        return (
            
                Submit from outside
                
            
        )
    }
}

export default MyApp;
票数 40
EN

Stack Overflow用户

发布于 2020-12-28 21:43:13

我找到的最好的解决方案在这里描述https://stackoverflow.com/a/53573760

将答案复制到此处:

在表单中添加"id“属性: id='my-form‘

代码语言:javascript
复制
class CustomForm extends Component {
    render() {
        return (
             
                // Form Inputs go here    
             
        );
    }
}

然后将相同的Id添加到表单外部的目标按钮的"form“属性中:

代码语言:javascript
复制
Outside Button

现在,“外部按钮”按钮将完全等效,就好像它在表单内部一样。

注意: IE11不支持此功能。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49525057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档