React 中使用 Formik 优化表单处理流程

表单是 Web 应用程序中必不可少的元素之一,它们往往是用户输入信息的最主要方式。然而,在处理表单数据时,开发者会面临一些常见的挑战,例如验证用户输入、处理异步请求和重新渲染表单等。为了解决这些问题,React 社区中出现了一个名为 Formik 的库,它可以简化表单处理的过程,提高开发效率,本文将详细介绍如何在 React 中使用 Formik,优化表单处理流程。

Formik 简介

Formik 是一个用于处理 React 表单的库,它管理表单状态和验证,为开发者提供了一个方便的方式来处理前端表单逻辑。Formik 的 API 非常简单,同时也非常强大,它支持许多常见的表单场景,例如异步提交、嵌套对象、数组字段,以及 Yup & Joy 的模式验证。此外,Formik 还提供了错误消息处理、触摸处理和字段状态等一系列功能。

安装 Formik

安装 Formik 只需要在命令行中输入以下命令:

--- ------- ------ ------

或者使用 yarn:

---- --- ------

上述命令将在项目中安装最新版本的 Formik。

创建一个简单的表单

我们先来创建一个简单的登录表单作为示例,了解如何在 React 中使用 Formik。

------ ----- ---- --------
------ - ------ - ---- ---------

----- --------- - -- -- -
  ------ -
    -----
      --------- ---------

      ------- 
        ---------------- ------ --- --------- -- --
        ------------------ - ------------- -- -- -
          ------------------ ---- ----------- --------
          ---------------------
        --
      -
        ---
          -------
          -------------
          -------------
          -------------
        -- -- -
          ----- ------------------------
            ---------------------
            ------ 
              ----------- 
              ------------ 
              ----------------------- 
              -------------------- 
            --

            --- --

            ------------------------
            ------ 
              --------------- 
              --------------- 
              ----------------------- 
              ----------------------- 
            --

            --- --

            ------- ------------- ------------------------
              ------------- - ------------ - ---------
            ---------
          -------
        --
      ---------
    ------
  --
-

------ ------- ----------

在上述代码中,我们首先导入 React 和 Formik 组件,并创建一个名为 LoginForm 的函数式组件。在组件中,我们使用 Formik 组件包裹了表单,其中 initialValues 定义了表单的初始值,onSubmit 定义了表单提交时的行为。在组件中,我们使用了解构赋值的方式获取了 Formik 提供的四个变量(values、handleChange、handleSubmit 和 isSubmitting),并将它们传递给表单元素的 props 中。

Formik 的核心概念

在继续深入学习 Formik 之前,我们需要了解一些 Formik 的核心概念,以便更好地理解在表单处理中它所提供的便利。

Formik 组件

Formik 组件是所有 Formik API 的主要入口点,它作为组件的最外层包裹,将管理表单的状态和行为。在 Formik 组件内,我们可以使用 Form 子组件来包装所有表单元素,同时将 initialValuesonSubmit 和其他属性传递给 Form 子组件。

Field 组件

Field 组件用于在 Formik 表单中实例化任何表单元素,例如输入框、选择框、单选框等。与 Formik 组件一样,Field 组件也是一个组件的包装器,我们可以使用它来将标准的 HTML 元素转换成 Formik 类型。

initialValues

initialValues 是表单的初始状态,我们可以通过传递一个对象来定义表单中的每个字段的值。

values

valuesinitialValues 的关系类似于 state props,即 valuesFormik 组件内部的状态对象,当表单元素的值改变时,Formik 会自动更新 values 的值。

handleChange

handleChange 是一个回调函数,它会在表单元素的值改变时被调用,用于更新 values。当一个字段的值发生变化时,handleChange 会根据事件对象的 name 属性自动更新对应的 values 的值。

handleSubmit

handleSubmit 是一个回调函数,当用户提交表单时被触发,它可以执行后台请求、数据验证等操作,在提交后通常会把表单重置为初始状态。

isSubmitting

isSubmitting 用于判断表单是否正在提交。当表单被成功提交时,这个变量将变为 false,这样我们就可以轻松防止多次提交。

errors 和 touched

errorstouched 用于处理表单验证的错误消息和触摸状态。errors 对象将记录表单的验证消息,而 touched 对象则将记录表单元素是否被触摸过。这两个变量的定义需要在表单验证时设定,我们将在下面的代码示例中介绍此过程。

表单验证和错误消息

在表单处理中,验证是一个关键步骤。Formik 使用一种名为 Yup 的 JavaScript 模式验证库,它可以让我们轻松定义表单字段的验证规则。在下面的代码示例中,我们将使用 Yup 模式验证库,并将表单验证添加到我们的示例中。

------ ----- ---- --------
------ - ------- ------ ----- ------------ - ---- ---------
------ - -- --- ---- ------

----- ------------ - --------------------
  ------ ------------
    --------------- -------
    ----------------------
  --------- ------------
    ------- ---- --------
    -------- ---- -------
    ----------------------
---

----- --------- - -- -- -
  ------ -
    -----
      --------- ---------

      ------- 
        ---------------- ------ --- --------- -- --
        -------------------------------
        ------------------ - ------------- -- -- -
          ------------------ ---- ----------- --------
          ---------------------
        --
      -
        --- ------- ------------ -- -- -
          ------
            -----
              ------ ------------------------------
              ------ ------------ ------------ --
              ------------- ------------ --
            ------

            -----
              ------ ------------------------------------
              ------ --------------- --------------- --
              ------------- --------------- --
            ------

            ------- ------------- ------------------------
              ------------- - ------------ - ---------
            ---------
          -------
        --
      ---------
    ------
  --
--

------ ------- ----------

在上述代码中,我们首先导入了 Formik 的所有相关组件,并创建了一个名为 SignupSchema 的 Yup 模式验证对象。然后,我们在 Formik 中使用 validationSchema 属性将验证规则传递给表单。最后,我们在 Form 标签中使用 <div> 元素包装每个输入框元素,使用 Field 元素渲染输入框并将其名称作为组件的 prop 传递,同时使用 ErrorMessage 元素来显示错误消息。

处理异步请求

对于带有异步请求的表单处理,我们可以使用 FormikhandleSubmit 回调函数,不过这种方式通常需要向后台发出请求并等待响应才能更新状态。为了解决这个问题,Formik 提供了一种名为 setSubmitting 的函数,它允许我们在异步请求完成后手动更新表单状态。

在下面的代码示例中,我们将使用一个简单的 Ajax 调用来模拟异步处理过程。

------ ----- ---- --------
------ - ------- ------ ----- ------------ - ---- ---------
------ - -- --- ---- ------

----- ------------ - --------------------
  ------ ------------
    --------------- -------
    ----------------------
  --------- ------------
    ------- ---- --------
    -------- ---- -------
    ----------------------
---

----- --------- - -- -- -
  ------ -
    -----
      --------- ---------

      ------- 
        ---------------- ------ --- --------- -- --
        -------------------------------
        ------------------ - ------------- -- -- -
          ------------- -- -
            ------------------ ---- ----------- --------
            ---------------------
          -- ------
        --
      -
        --- ------- ------------ -- -- -
          ------
            -----
              ------ ------------------------------
              ------ ------------ ------------ --
              ------------- ------------ --
            ------

            -----
              ------ ------------------------------------
              ------ --------------- --------------- --
              ------------- --------------- --
            ------

            ------- ------------- ------------------------
              ------------- - ------------ - ---------
            ---------
          -------
        --
      ---------
    ------
  --
--

------ ------- ----------

在上述代码中,我们首先定义了一个名为 SignupSchema 的 Yup 模式验证对象。在 Formik 组件中,我们将这个验证对象传递给 validationSchema 属性,然后在提交表单时添加一个异步处理函数,在这里我们使用了一个简单的延时函数模拟了一个异步处理过程。在异步处理函数结束后,我们使用 setSubmitting(false) 来手动更新表单状态。

结论

在这篇 React 中使用 Formik 优化表单处理流程的文章中,我们详细介绍了如何在 React 中使用 Formik。我们首先介绍了 Formik 的主要概念,例如 Formik 组件、Field 组件、initialValueshandleChangehandleSubmitisSubmittingerrorstouched。然后,我们展示了如何使用 Yup 来进行表单验证和错误消息的处理,并展示了如何使用异步请求来处理表单处理。Formik 是一个非常强大且灵活的库,它可以让我们轻松地管理,并且针对表单中的常见问题提供了许多解决方案。相信在您的实际开发中,使用 Formik 并结合 Yup 对表单进行处理,会更加有效地提高您的开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66f50280c5c563ced569d247


猜你喜欢

  • Webpack 在 React Native 项目中的应用

    Webpack 在 React Native 项目中的应用 Webpack 是一个非常流行的前端打包工具,通常被用于构建传统的 Web 应用,但是它同样可以被用于构建 React Native 项目。

    2 个月前
  • 数字无障碍,保障残障人群权益

    数字无障碍是指通过技术手段降低数字信息对残障人群阅读和理解的难度,从而保障残障人群的权益。数字无障碍可以涉及到多个方面,比如网页可访问性、移动端应用可访问性、数字内容可访问性等,本文将重点讲解前端开发...

    2 个月前
  • Cypress 如何处理表单验证

    Cypress 是一个先进的前端测试工具,它可以帮助开发人员更轻松地运行端到端测试,其中包括表单验证。本文将探讨如何使用 Cypress 处理表单验证,内容详细且有深度和学习以及指导意义。

    2 个月前
  • Koa2 和 MySQL 配合使用时的问题及解决方法

    在前端开发工作中,我们经常需要使用后端开发技术来构建网站的后台服务。Koa2 是一个轻量级的 Node.js 框架,可以帮助我们快速搭建服务器端的应用程序。而 MySQL 则是一种常用的开源关系型数据...

    2 个月前
  • 基于 SPA 开发的前端架构优化总结

    单页应用(SPA)是一种越来越流行的前端架构,它通过异步加载页面内容,实现了快速响应页面切换、增强用户体验等优点。然而,随着前端应用复杂度的不断提升,开发者需要面对的技术挑战也日益增加。

    2 个月前
  • 如何利用多线程优化 Unity3D 程序的性能?

    背景 在使用 Unity3D 开发时,我们经常会遇到一些性能瓶颈问题,尤其是在运行大型和复杂场景时。为了提高程序的性能,我们可以采用多线程的方式进行优化。多线程是指在同一时间内,程序中多个函数可以同时...

    2 个月前
  • Next.js 提高页面访问速度的技巧

    在现代 web 应用中,保持用户的耐心是至关重要的。随着更多的用户倾向于访问较快的网站,网站的速度变得越来越重要。为了提高性能和访问速度,Next.js 提供了一些技巧和最佳实践,本文将深入探讨并提供...

    2 个月前
  • Redis 应用中的线程安全及解决方案

    Redis 应用中的线程安全及解决方案 Redis 是一种开源的内存型数据库系统,它支持多种数据结构,包括字符串、列表、集合、哈希表、有序集合等。在前端开发中,我们常常会用到 Redis 作为数据缓存...

    2 个月前
  • 在 React 中使用 CSS Reset

    当我们开始构建一个新的 React 应用程序时,需要考虑如何统一处理样式,以确保我们的应用程序在不同的浏览器中呈现一致。一个很好的解决方案是使用 CSS Reset。

    2 个月前
  • Kubernetes 中的 PersistentVolumeClaim 如何使用?

    Kubernetes 是一个流行的跨平台容器编排系统,它可以帮助开发人员快速、安全地构建和部署应用程序。在 Kubernetes 中,应用程序通常需要访问持久化存储来存储数据和配置信息,而 Persi...

    2 个月前
  • 如何在 Deno 中使用 JWT?

    在本文中,我们将重点介绍如何在 Deno 中使用 JWT(JSON Web Token)。JWT 是一种用于认证和授权的标准协议。在前端开发中,无论是单页应用程序还是服务器端渲染,JWT 都是一种非常...

    2 个月前
  • ESLint 报错称 'JSON signature is invalid',应该怎么处理?

    什么是 ESLint? ESLint 是一个由 Nicholas C. Zakas 于2013年6月创建的开源代码静态检查工具。它使用规则配置文件对 JavaScript 代码进行分析,检测出潜在的问...

    2 个月前
  • GraphQL 缓存实践指南

    GraphQL 是一个强大的查询语言和运行时,它允许前端应用程序按需获取数据,并允许后端向前端提供更好的 API。然而,由于 GraphQL 与传统的 RESTful API 不同,因此其缓存策略也有...

    2 个月前
  • Chai 断言库常见错误及如何解决

    Chai 是一个流行的 JavaScript 断言库,它让我们可以更方便地编写和运行测试用例。但是,使用 Chai 时可能会遇到一些问题。这篇文章将介绍 Chai 常见的错误,并分享如何解决这些问题。

    2 个月前
  • Sequelize 的使用方式之文档化

    Sequelize是一个基于Promise的Node.js ORM(Object-Relational-Mapping)模型,支持MySQL、MariaDB、SQLite、PostgreSQL等多种数...

    2 个月前
  • RESTful API 如何分配任务给多个服务实例?

    RESTful API 是一种常用的网络服务架构,它能够提供高效的数据交互与处理。在真实的生产环境下,为了解决流量与负载均衡问题,我们常常会部署多个服务实例,这就需要一种有效的方式来分配任务给这些服务...

    2 个月前
  • Material design 中使用 NavigationView 的技巧分享

    什么是NavigationView? NavigationView是Material design中实现侧滑菜单的一种方案。NavigationView通常位于侧边栏,并可用于导航。

    2 个月前
  • 如何在 Mocha 测试中测试 React 组件

    在前端开发中,测试是非常重要的环节。而在 React 组件的开发中,测试则显得更为重要。Mocha 是一个流行的 JavaScript 测试框架,而对于测试 React 组件,Mocha 也是一个非常...

    2 个月前
  • Next.js 中实现类似 Vue 的 asyncData 的方法

    背景 在使用 Vue 开发前端应用时,我们经常使用 asyncData 方法来在组件渲染之前异步加载数据并将数据注入到组件中。这使得我们可以使用服务端渲染(SSR)并且可以在客户端渲染时缓存渲染结果以...

    2 个月前
  • 使用 Hapi 和 Vue.js 进行服务器端渲染

    随着前端开发的发展,前端技术逐渐成熟,同时也带来了前后端分离的潮流。虽然这种方式能够提高开发效率,但是却牺牲了一些性能,比如首屏渲染速度。为了解决这个问题,我们可以使用服务器端渲染(Server-Si...

    2 个月前

相关推荐

    暂无文章