编程语言
首页 > 编程语言> > javascript – 当嵌套在第三方组件中时,Field的Formik包是空的

javascript – 当嵌套在第三方组件中时,Field的Formik包是空的

作者:互联网

我正在使用Formik的Field组件来渲染这样的输入:

<Formik 
  initialValues={initialValues}
  onSubmit={onSubmit}
  render={formProps => (
    <Form>
      <Field name="lastName" render={({ field, form }) => (
        <input {...field} placeholder="lastName" />
      )} />
    </Form>
)} />

这是一个说明问题的CodeSandbox.您将看到是否将产品列定义与仅将产品呈现为字符串而不是使用Formik输入的产品列定义交换,它可以正常工作.

在上面的代码中,Formik似乎是“自动地”确定Field的渲染功能中的Formik包形式对象.

在我将Field集成到第三方库中之前,这一点没有问题,在我的情况下,将它呈现在agGrid表的单元格中.当我这样做时,我得到TypeError:this.props.formik.registerField不是函数浏览器控制台错误.调试此错误,我在Formik的编译代码中看到以下内容:

FieldInner.prototype.componentDidMount = function () {
  this.props.formik.registerField(this.props.name, this);
};

当我检查this.props.formik应该是我的Formik包时,它是一个空对象.这与我在Field的渲染功能中使用断点时看到的对象相同.当我在agGrid之外检查这个对象的Field的实例时,它是完全填充的Formik包,包括initialValue props,registerField函数等.

当我的Field嵌套在agGrid表格单元格中时,为什么Formik无法正确检索Formik包形式对象?如何解决此问题?

解决方法:

您使用的是React> = 16的版本吗?如果是这样,看起来AgGridReact不支持Formik在幕后使用的新版本的上下文API.

https://github.com/ag-grid/ag-grid-react/issues/131

要么等待AgGridReact发布新版本,要么考虑降级到React< 16的版本,以便Formik回退到旧的上下文api.

标签:javascript,reactjs,formik
来源: https://codeday.me/bug/20190522/1152421.html