npm 包 @cyxou/react-jsonschema-form 使用教程

阅读时长 7 分钟读完

在前端开发中,我们经常需要使用表单进行数据的收集和展示。而 JSONSchema 是一种用于描述 JSON 数据结构的语言,可以被用来生成表单。@cyxou/react-jsonschema-form 就是一个基于 JSONSchema 的 React 组件库,可以帮助我们快速地生成表单组件,省去了一些繁琐的代码。本篇文章就是一篇针对这个 npm 包的使用教程,内容详细、有深度、指导性强,带有示例代码,以帮助更多的前端工程师更好地使用 @cyxou/react-jsonschema-form。

安装

使用 npm 或 yarn 安装 @cyxou/react-jsonschema-form:

基本使用

一般来说,使用 @cyxou/react-jsonschema-form 的基本步骤如下:

  1. 定义 JSONSchema 和 UI Schema(可选)。JSONSchema 定义了表单数据的结构,而 UI Schema 则用于定义表单的布局、样式以及校验规则;
  2. 引入 @cyxou/react-jsonschema-form 组件,并配置相关参数,例如 JSONSchema 和 UI Schema;
  3. 渲染表单。

下面我们就逐一介绍这些步骤。

定义 JSONSchema 和 UI Schema

在使用 @cyxou/react-jsonschema-form 的时候,我们需要先定义 JSONSchema 和 UI Schema。

以一个简单的表单为例,JSONSchema 可能长这样:

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

这个 JSONSchema 定义了一个表单,包括三个字段:姓名、性别和年龄,类型分别是字符串和数字。其中,姓名和性别字段使用了标题,方便用户填写;性别字段特别在于使用了 enum 关键字,指定可选的值为男和女。

UI Schema 则是可选的,它可以定义表单的布局和样式,例如:

这个 UI Schema 定义了两个规则:

  1. 表单中的字段排列顺序可以由 ui:order 字段指定;
  2. 性别字段使用了 ui:widget 关键字将其转换成单选按钮,而不是下拉选择框。

引入组件

在定义好 JSONSchema 和 UI Schema 之后,我们就可以引入 @cyxou/react-jsonschema-form 组件,并配置相关参数,例如 JSONSchema 和 UI Schema。

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

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

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

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

这段代码中,我们首先引入了 @cyxou/react-jsonschema-form 组件,传入了需要的参数,包括 JSONSchema、UI Schema 和提交表单时的回调函数 onSubmit(在这个例子中,我们只是把表单数据输出到控制台)。

渲染表单

最后一步是通过 render 属性渲染表单:

这个 Form 组件看起来就像一个普通的表单。渲染出来的表单大致长这样:

进一步了解

@cyxou/react-jsonschema-form 提供了丰富的组件库和可配置选项,可以满足各种场景下的表单需求。在此,我们只是介绍了最基础的用法。如果你对这个组件库更感兴趣,建议去阅读文档:https://react-jsonschema-form.readthedocs.io/en/latest/。

实际应用

下面通过一个稍微复杂的例子,来进一步演示 @cyxou/react-jsonschema-form 的实际应用。

我们要设计一个在线简历表单,包括个人基本信息、教育背景、工作经历以及项目经历。为了简化问题,我们就只介绍其中某一部分的 JSONSchema 和 UI Schema。

比如说,我们的教育背景部分的 JSONSchema 可以长成这样:

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

这个 JSONSchema 定义了五个字段,包括学位、专业、学校、开始日期和结束日期。注意,这里使用了 format 关键字将开始日期和结束日期字段的类型修改为日期类型。

UI Schema 可以长这样:

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

这个 UI Schema 定义了五条规则:

  1. 教育背景字段采用行内展示;
  2. 教育背景是一个可复制、可排序、可删除的字段;
  3. 学位字段使用下拉菜单展示;
  4. 开始日期和结束日期字段使用日期选择框展示。

我们将教育背景部分的 JSONSchema 和 UI Schema 传入 Form 组件后,渲染出来的表单长这样:

结语

通过这篇文章,我们介绍了 @cyxou/react-jsonschema-form 的基本用法和一个实际应用场景,希望能够帮助到前端工程师更高效地开发表单相关的功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005516f81e8991b448ceb37

纠错
反馈