npm 包 @marudor/react-joi-validation 使用教程

前言

前端工程师在日常的开发中,经常需要对用户输入做校验。Joi是一款用于校验 JavaScript 对象的包裹器。而 @marudor/react-joi-validation 是一个基于 React 的轮子,通过封装 Joi,可以在 React 中轻松进行输入校验。

本文将为大家介绍如何使用 @marudor/react-joi-validation 进行输入校验,并提供详细的代码示例。

安装

要使用 @marudor/react-joi-validation,需要先安装 Joi。在安装 Joi 之后,可以通过以下命令安装 @marudor/react-joi-validation:

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

或者,您也可以使用 yarn:

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

使用教程

基本用法

使用 @marudor/react-joi-validation 只需要两步:定义 schema,使用 Validation 组件。

首先,需要定义一个 Joi schema。schema 是用来描述校验规则的数据结构。例如,下面是一个校验 email 的 schema:

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

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

接着,在 React 组件中使用 Validation 组件。Validation 组件是用来设置 schema 和校验 React 组件输入的值,例如:

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

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

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

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

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

上面的例子中,我们使用 Validation 组件将 schema 绑定到了值为 { email } 的对象上。在 value={{ email }} 中,我们使用了 ES6 的语法。这里 { email } 等价于 { email: email }

debounce 是用来设置延迟校验的毫秒数。在用户输入时,校验是有一定开销的,设置 debounce 为 1000 和 debounce 为 0,性能表现是截然不同的。

接着,在 Validation 组件内,我们可以根据校验结果,返回不同的 JSX。在上面的例子中,我们返回了 errors?.email?.message。如果 email 输入不合法,则返回 email 的错误信息;否则,返回 undefined

整合表单库

在实际的业务中,我们经常使用一些现成的表单库,例如 Formik 和 Redux Form。这些表单库封装了一些表单数据的处理逻辑(例如优雅地处理表单的初始值以及提交逻辑),通过对表单库进行整合,我们可以使用 @marudor/react-joi-validation,对表单做校验。

接下来,我们将以 Formik 为例,介绍如何整合 @marudor/react-joi-validation。

首先在表单的顶层加入 ValidationProvider 组件:

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

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

Formik 组件内,我们使用了 Formik 的一些 API,例如 FieldValidationError。这些 API 与 @marudor/react-joi-validation 的 API 并不冲突,可以放心使用。

在 ValidationProvider 中,我们设置了 debounce 时间为 1000。由于 ValidationProvider 是对整个子树进行校验,所以设置 debounce 将会对子组件的校验结果产生影响。如果希望在子组件中自定义 debounce,可以在子组件的 Validation 组件中加入 debounce 属性。

接下来,我们需要定义一个 Joi schema:

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

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

这跟之前的例子相同。我们需要将上面的 schema,与 Formik 的表单初始值绑定:

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

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

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

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

上面的例子中,我们给 Field 组件加入了 onChangevalue,用来绑定 Formik 表单的值。接着,我们使用 Validation 组件,在 ValidationProvider 内部,将 schema 绑定到了 Formik 的表单值上。

最后,在 Validation 组件内部,我们可以根据校验结果,返回不同的 JSX。如果存在错误,则返回一个提示信息。

结语

@marudor/react-joi-validation 是一个简单而灵活的输入校验库,适用于 React 生态中的各种输入场景。本文提供了详细的使用教程和代码示例,希望对读者有所帮助。

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


猜你喜欢

  • npm 包 app-npm 使用教程

    什么是 app-npm app-npm 是一个前端的 npm 包,它提供了一套强大的功能,让你可以更轻松、高效地编写 web 应用程序。它包含许多实用的模块和工具,例如: 基于 Vue.js 的 U...

    2 年前
  • npm 包 wikipics 使用教程

    简介 wikipics 是一个 npm 包,它可以帮助我们从维基百科上获取指定主题的图片链接。它是一个非常实用的工具,尤其是在前端开发中,我们通常需要许多图片来展示网站的内容。

    2 年前
  • npm 包 react-dialog-boxes 使用教程

    简介 React Dialog Boxes 是一个基于 React 的轻量级弹窗组件库,它提供了多种样式的弹窗,并支持自定义样式。在前端开发中,弹窗常常用于提示信息、确认操作、输入表单等场景。

    2 年前
  • npm 包 wikipics-api 使用教程

    前言 在现代化的 Web 开发过程中,前端开发已经成为越来越受追捧的工作领域,前端技术的进步也越来越速度突飞猛进,其中涉及最多的就是使用各种优秀的库和框架来帮助我们更高效地完成开发任务。

    2 年前
  • npm 包 banno-htmlhint 使用教程

    前言 在前端开发过程中,代码的质量是非常重要的一环。而 HTML 作为页面的基石,编写规范的 HTML 代码显得尤为重要。为了达到这一目的,我们可以使用 banno-htmlhint 这个 npm 包...

    2 年前
  • npm 包 city-lat-long-map 使用教程

    在前端开发中,我们经常需要使用到地图相关的功能。而地图相关的功能涉及到很多位置信息的处理,比如经纬度。在很多情况下,我们需要知道不同城市的经纬度信息。如果手动去查找并记录下每个城市的经纬度信息是非常麻...

    2 年前
  • npm 包 aframe-lerp-component 使用教程

    简介 aframe-lerp-component 是一款基于 A-Frame 框架的 npm 包,用于实现场景中物体的平滑插值运动。插值运动是指物体从一个位置移动到另一个位置时,不是瞬间到达目的地,而...

    2 年前
  • npm 包 tool-js-package 使用教程

    前言 在前端开发中,我们经常会用到一些公用的工具函数或模块,这些工具函数或模块往往需要自己去实现,而且在不同项目中也需要重复地去实现。这给我们的开发工作带来了很多的不便,也增加了我们的工作量。

    2 年前
  • npm 包@donughtnerd/pug-stringifier 使用教程

    在前端开发中,Pug 是一个非常方便的模板引擎,可以帮助我们轻松编写可读性强的 HTML。然而,与此同时,将 Pug 文件转换成 HTML 文件在某些情况下会变得非常麻烦,特别是当你需要动态地使用 P...

    2 年前
  • npm 包 @savvy-css/border-garnishes 使用教程

    前端开发中,我们经常需要对页面元素的边框进行美化,为此我们可以使用一些 CSS 技术来实现。不过,如果每个页面都手写 CSS 样式,代码量将会非常大,而且难以维护。

    2 年前
  • npm 包 ceshuhttp 使用教程

    ceshuhttp 是一个基于 Node.js 的轻量级 HTTP 客户端。它的目标是提供一种简单、易用的方式来进行 HTTP 请求,无论是在浏览器端还是在 Node.js 环境下。

    2 年前
  • npm 包 level.css 使用教程

    背景 作为前端开发者,我们经常需要使用 CSS 样式来美化页面。而在构建网站或应用时,我们也需要保持一致的风格和统一的规范,使得整个项目更为清晰易懂、易于维护。为此,我们需要一种能够方便我们管理样式的...

    2 年前
  • npm 包 Lychii-ui 使用教程

    简介 Lychii-ui 是一个基于 Vue 开发的 UI 组件库,提供了一系列组件和工具,可以快速构建精美且高效的 Web 应用程序。Lychii-ui 中封装的组件包括但不限于按钮、表单、导航、消...

    2 年前
  • npm 包rss2object 使用教程

    前言 rss2object 是一款用于将 RSS 源转换为 JavaScript 对象的 npm 包,它提供了一种方便快捷的方式来处理 RSS 源。在本文中,我们将介绍如何使用 rss2object ...

    2 年前
  • npm 包 generator-adoredemo 使用教程

    什么是 generator-adoredemo? generator-adoredemo 是一个基于 Yeoman 生成器的 npm 包,该生成器旨在为前端开发人员提供一个快速创建 React 应用程...

    2 年前
  • npm 包 ngx-is-equals-to 使用教程

    在前端开发中,经常涉及到比较两个对象是否相等的需求。ngx-is-equals-to 是一个用于比较两个对象是否相等的 npm 包,本文将介绍 ngx-is-equals-to 的使用教程。

    2 年前
  • npm 包 password-mongoose 使用教程

    介绍 在前端开发中,用户密码的加密和验证是一个非常重要的功能。而 password-mongoose 是一个方便的npm 包,可以用来对 Mongoose 模型中的用户密码进行加密和验证。

    2 年前
  • npm 包 xuanxuan 使用教程

    Xuanxuan 是一款开源的多人在线聊天系统,支持多人聊天、在线状态和聊天记录等功能,适用于企业和团队内部使用。这篇文章将详细介绍如何使用 npm 包 xuanxuan,并提供示例代码和指导意义。

    2 年前
  • npm 包 bulvue 使用教程

    简介 bulvue 是一个基于 Vue.js 的可视化 Web 前端组件库,提供了大量的组件和 UI 元素,以及基于 Vue.js 的数据流和生命周期等功能。bulvue 提供了便捷的组件配置,允许用...

    2 年前
  • npm 包 vscode-expand-abbreviation 使用教程

    在前端开发中,经常需要写大量的 HTML 和 CSS 代码。有时候,我们需要写出许多相似或重复的样式属性或 HTML 元素。这时,我们就需要一个快速的方式来生成这些代码。

    2 年前

相关推荐

    暂无文章