当前位置: 首页 > 面试题库 >

React Formik:如何使用自定义onChange和onBlur

淳于亦
2023-03-14
问题内容

我从formik库开始进行反应,但是我无法弄清道具handleChange和handleBlur的用法。

根据docs的说法,handleBlur可以设置为a上的prop <Formik/>,然后必须手动向下传递到<input/>

我已经尝试过了,但是没有成功:(为了更加清晰,我保留了关于handleBlur的代码)

import React from "react";
import { Formik, Field, Form } from "formik";
import { indexBy, map, compose } from "ramda";
import { withReducer } from "recompose";

const MyInput = ({ field, form, handleBlur, ...rest }) =>
  <div>
    <input {...field} onBlur={handleBlur} {...rest} />
    {form.errors[field.name] &&
      form.touched[field.name] &&
      <div>
        {form.errors[field.name]}
      </div>}
  </div>;

const indexById = indexBy(o => o.id);
const mapToEmpty = map(() => "");

const EmailsForm = ({ fieldsList }) =>
  <Formik
    initialValues={compose(mapToEmpty, indexById)(fieldsList)}
    validate={values => {
      // console.log("validate", { values });
      const errors = { values };
      return errors;
    }}
    onSubmit={values => {
      console.log("onSubmit", { values });
    }}
    handleBlur={e => console.log("bluuuuurr", { e })}
    render={({ isSubmitting, handleBlur }) =>
      <Form>
        <Field
          component={MyInput}
          name="email"
          type="email"
          handleBlur={handleBlur}
        />
        <button type="submit" disabled={isSubmitting}>
          Submit
        </button>
      </Form>}
  />;

这种方法有什么问题?实际上应该如何使用handleBlur和handleChange?


问题答案:

由于模糊事件仅在字段级别上有效,因此您需要从中删除第一个handleBlurFormik并在Field元素中执行以下操作:

<Field
    component={MyInput}
    name="email"
    type="email"
    onBlur={e => {
        // call the built-in handleBur
        handleBlur(e)
        // and do something about e
        let someValue = e.currentTarget.value
        ...
    }}
/>

参见https://github.com/jaredpalmer/formik/issues/157



 类似资料:
  • 问题内容: 我正在尝试在Go中创建和使用自定义包。这可能很明显,但是我找不到很多信息。基本上,我在同一个文件夹中拥有这两个文件: mylib.go main.go 当我尝试时,出现此错误: 我尝试先运行,但似乎没有做任何事(没有生成文件,没有错误消息)。所以有什么想法我该怎么做? 问题答案: 首先,请务必阅读并理解“如何编写Go代码”文档。 实际答案取决于您“定制包装”的性质。 如果打算用于一般用

  • 我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到有关此的太多信息。基本上,我在同一个文件夹中有这两个文件: mylib。去 主要的去 当我尝试时,我得到这个错误: 我试着运行,但它似乎什么都没做(没有生成文件,没有错误消息)。你知道我该怎么做吗?

  • 我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。 如何使用Itext7实现这一点? 谢谢

  • 根据Javers的文件:(参考:https://javers.org/documentation/repository-configuration/) JaVers在SQL数据库中创建四个表: jv_global_id域对象标识符, jv_commitJaVers提交元数据, jv_commit_property提交属性, jv_snapshot域对象快照。 我当前使用的Spring Boot J

  • 问题内容: 实施自己的最佳方法是哪一种? 其实我得到一个问题登记。如果我在中使用自定义类,则管理页面上不会显示任何应用程序。 我用一个小技巧解决了这个问题。我写了这个课: 并像这样实现我的自定义AdminSite: 所以,我可以用这个为。 有人知道更好的方法吗?由于我以下划线开头访问var,所以它不过是hack。我不喜欢黑客。 编辑:另一种方法是重写函数,但是在这种情况下,我将有冗余代码。 问题答

  • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解