首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将react-codemirror2与formik一起使用?

是否可以将react-codemirror2与formik一起使用?
EN

Stack Overflow用户
提问于 2019-04-05 23:02:14
回答 1查看 190关注 0票数 2

我有一个项目,我使用Formik和react- codemirror2,我想在Formik中控制onChange,但codemirror2中的onChange没有event...and,我不知道如何使用……让我解释得更清楚:我有一个表格:

代码语言:javascript
复制
<Formik
   enableReinitialize
   onSubmit={values => 
       {this.submitFormDefinition(values)}}
       initialValues={this.state}
 >
  {({ handleSubmit }) => (
    <div>
      <Form
         onSubmit={handleSubmit}
         autoComplete="off"
         onChange={event => {
            this.handleChange(event)
          }}
      >
          <Field
            component={CustomInputComponent}
                    name="name"
                    id="id"
                    multiline
          />

        </Form>
    </div>
   )}

其中我有我的函数handleChange:

代码语言:javascript
复制
handleChange = event => {console.log('change') ....}

其中CustomInputComponent是我的codemirror2组件:

代码语言:javascript
复制
  const CustomInputComponent = ({ field, form, ...props }) => {
  return (
    <CodeMirror
      id={props.id}
      name={props.name}
      value={this.state.value}
      options={{
        mode: 'javascript',
        theme: 'default',
        lineNumbers: true,
      }}
      {...props}
      onBeforeChange={(editor, data, value) => {
        console.log({ value })
        this.setState({ jsonSchema: value })
      }}
      onChange={(editor, data, value) => {
        ?????????????
      }}
    />
  )
}

如果我使用另一个组件作为textField从Materia-UI它工作,我不需要调用我的CustomInputComponent的onChange,这是由formink直接调用…因为textField的onChange也有作为参数的事件...但正如您在代码中看到的,codeMirror的onChange没有事件...

我需要调用my handleChange而不是codeMirror的onChange ...我试着这样做:

代码语言:javascript
复制
<CodeMirror
    onChange=form.handleChange

或使用:

代码语言:javascript
复制
<CodeMirror
     onKeyUp={form.handleChange}

或者:

代码语言:javascript
复制
<CodeMirror
     onKeyUp={(editor, event) => {
      form.handleChange(event)
      }}

但是我的函数handleChange永远不会调用如何在Formik中使用react-codeMirror2?是可能的吗?我怎样才能理解福敏克的onChange?

EN

回答 1

Stack Overflow用户

发布于 2019-10-01 02:57:25

Formik的handleChange方法需要一个HTMLInput更改事件,并从输入中获取更新值。不幸的是,如果您使用的是CodeMirror,就不会得到这样的便利。但是,CodeMirror提供了组件onBeforeChange的值,Formik提供了一个setFieldValue方法,该方法允许您将一个值设置为状态。所以你可以这样做:

代码语言:javascript
复制
<Formik {...whateverPropsYouSet}>
  (formikProps) => (
    <CodeMirror
      value={formikProps.values.yourDataField}
      onBeforeChange={(_editor, _data, value) => {
        formikProps.setFieldValue('yourDataField', value);
      }
    />
  )
</Formik>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55538346

复制
相关文章

相似问题

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