npm 包 redux-form-actions-draftjs 使用教程

在前端开发中,表单是非常常见的元素,而表单中输入的内容多样性也非常大,比如文本、数字、图片、富文本等。在 React 项目中使用 redux-form 库可以方便地创建表单,而配合 draft-js 库可以实现富文本编辑器。但使用 redux-form 和 draft-js 来创建富文本表单时,需要写大量的 action 和 reducer,而且还不够灵活。在这个时候,可以使用 redux-form-actions-draftjs 这个 npm 包,它可以大大简化代码量,并提供更好的可维护性和灵活性。

安装

可以通过 npm 安装这个包:

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

或者使用 yarn:

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

使用

创建 action 和 reducer

首先需要创建一个 action 和 reducer。在 redux-form 中,每个表单都需要一个唯一的表单名字,所以在这里也需要指定一个表单名字。另外,这里使用了 draft-js 的 ContentState,所以可以在表单中使用富文本编辑器。

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

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

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

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

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

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

将表单连接到 store

将表单连接到 store 时,需要引入 reducer,并将其加入 combineReducers 中。同时,也需要将 redux-form 的 reducerredux-form-actions-draftjsreducer 一起加入 combineReducers 中。

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

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

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

创建表单

在一个 React 组件中创建表单,需要引入 Fieldredux-form-actions-draftjs 中的 DraftEditorField 负责连接某个组件或输入框到表单,而 DraftEditor 就是使用富文本编辑器的输入框。

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

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

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

注意,在每个 Field 中指定了 name,这个名字可以随便取,但要保证唯一。

与组件的联动

在 React 组件中,我们一般会将表单元素的值和组件的 state 绑定在一起,这样用户的输入就可以实时更新组件的状态。使用 redux-form-actions-draftjs 也可以这样做。在组件中可以通过 input 属性获取到表单中输入框的值,也可以通过 meta 属性获取到输入框的状态。在下面的例子中,实时记录输入框中的字数,并且如果字数超过一定数量则停止输入。

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

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

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

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

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

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

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

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

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

DraftEditor 组件中,通过 useEffect 监听 redux-form 中存储的值并更新本地的 editorState。当用户在输入框中输入内容时,并不是实时更新 redux-form 中存储的值,而是等用户完成了输入操作(即退出输入框)时才更新 redux-form 中存储的值。上面的 handleEditorChange 函数中,通过调用 onChange 函数 实现更新 redux-form 的操作。当字数超过限制时,DraftEditor 组件会显示错误提示。这样就实现了输入框中输入内容和组件状态的联动。

总结

通过使用 redux-form-actions-draftjs,可以大幅度减少表单代码的编写量,并且方便同时使用 redux-form 和 draft-js 实现富文本输入框。同时还可以将表单元素的值与组件状态相连接,带来更好的用户体验。

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


猜你喜欢

  • npm 包 jquery-tnw-modal 使用教程

    随着前端技术的不断发展,为了提高自己的开发效率和代码质量,我们经常会使用一些 npm 包来辅助我们开发。本文将介绍一个优秀的 npm 包 jquery-tnw-modal,它是一个轻量级的 jQuer...

    3 年前
  • npm 包 gulp-lmt-tasks 使用教程

    简介 在前端开发中,我们少不了构建工具,其中 Gulp 是非常常用的一种。它可以帮助我们自动化构建任务,例如压缩代码、编译文件、合并文件等等。当我们在项目中频繁使用一些特定的任务时,我们需要将其封装成...

    3 年前
  • npm 包 xyz-to-latlon 使用教程

    在前端开发中,经常需要将经纬度转换成 XYZ 坐标,或者将 XYZ 坐标转换成经纬度。这时候就需要使用到 xyz-to-latlon 这个 npm 包。这个包能够方便地将 XYZ 坐标与经纬度相互转换...

    3 年前
  • npm 包 lint-target-blank 使用教程

    前言 如果你是一个前端开发人员,你可能已经遇到了一些用户直接在你的网站上单击链接并导致页面跳转,而不是打开一个新的标签页。这可能会给用户带来糟糕的用户体验,因为他们可能会失去之前浏览的页面。

    3 年前
  • npm 包 parse-server-oss-adapter2 使用教程

    在前端开发过程中,我们时常需要将后端的数据存储到云存储中,这时可以选择使用 parse-server-oss-adapter2 这个 npm 包。本文将为大家介绍使用该包的详细教程,包含深度学习和指导...

    3 年前
  • npm 包 unlisten 使用教程

    在前端开发中,我们经常需要绑定事件来实现各种交互操作。但是,当事件不再需要时,我们也需要将其解绑,以免出现意外情况。npm 包 unlisten 就是一款可以管理事件监听器的工具,本篇文章将会详细介绍...

    3 年前
  • npm 包 redux-state-container 使用教程

    如果你是一名前端开发人员,你一定会涉及到状态管理的问题。 在 React 中,Redux 是一种流行的状态管理库。其中的 State Container是一个非常有用的模块,可以让你更加灵活的控制 R...

    3 年前
  • npm 包 @progressivelabs/mendel 使用教程

    介绍 @progressivelabs/mendel 是一个基于 Webpack 的管理前端组件版本的工具。它能够根据组件的语义化版本号来生成代码库,同时提供了一套多变量的配置,使得代码库的管理变得更...

    3 年前
  • npm 包 @scomith/ng-jwt-auth 使用教程

    前言 随着 Web 应用程序的普及,用户验证和安全变得越来越重要。 JSON Web Tokens (JWT) 已经成为了一种流行的 Web 应用程序认证方案之一,可以将用户信息加密在 token 中...

    3 年前
  • npm 包 aws-dynamodb-streams 使用教程

    1. 前言 在前端开发中,我们经常会遇到需要与后端交互的情况。对于一些需要持久化的数据存储,我们通常会选择 NoSQL 数据库。在 NoSQL 数据库中,DynamoDB 是一个非常受欢迎的解决方案,...

    3 年前
  • npm 包 freebox-caller-id 使用教程

    什么是 npm? npm 是一种 JavaScript 包管理器,可以用于共享和分发代码、管理依赖关系和版本控制。它是 Node.js 的默认包管理器,也是世界上最大的软件注册表之一,拥有近百万个包供...

    3 年前
  • npm 包 google-play-proto 使用教程

    Google Play Proto 是一款高效解析 Google Play 服务协议和信息的 npm 包。它提供了一个简单而直观的 Node.js 接口,方便 Node.js 开发者以编程的方式获取 ...

    3 年前
  • npm 包 justo.generator.catalog 使用教程

    前言 npm 是全球最大的包管理器之一,它提供了许多优秀的 JavaScript 包供开发者使用。在前端开发中,我们常常需要使用各种 npm 包来协助我们进行工作。

    3 年前
  • npm 包 Justo.Generator.Generator 使用教程

    在前端开发中,使用 npm 包管理工具已经成为了不可或缺的一部分。而 Justo.Generator.Generator 这个 npm 包,则是一个非常有用的工具,它可以帮助开发者快速生成项目的代码结...

    3 年前
  • npm 包 justo.plugin.chrome 使用教程

    简介 npm 是一个 Node.js 的包管理工具,用于帮助前端开发者管理项目中的第三方模块以及自己编写的模块。在开发过程中,我们可能会需要使用一些特定的功能,而这些功能有时候并不是原生支持的,这时候...

    3 年前
  • npm 包 justo.generator.plugin 使用教程

    本文介绍了 npm 包 justo.generator.plugin 的使用方法,可用于前端开发中的代码生成工作,提高开发效率。 什么是 justo.generator.plugin 在前端开发中...

    3 年前
  • npm 包 justo.generator.react 使用教程

    在前端开发中,使用 npm 包已经成为了日常工作的一部分。今天我们来介绍一个可以为 React 开发提供快速脚手架的 npm 包:justo.generator.react。

    3 年前
  • npm包node-console-log使用教程

    在前端开发中,输出调试信息是一项非常重要的任务,而 console.log() 则是一个被广泛使用的函数。然而,在大型或复杂的项目中,使用 console.log() 进行调试可能变得非常费时费力。

    3 年前
  • npm包jdf-cms2使用教程

    本文主要介绍npm包jdf-cms2的使用方法和基础知识,帮助前端开发者更好地使用这个工具来完成自己的开发任务。 什么是jdf-cms2? jdf-cms2是一个基于Node.js的多人协作的前端...

    3 年前
  • 使用 npm 包 eip672 的教程

    什么是 eip672? eip672 是一个基于以太坊的 ERC-672 标准实现的 npm 包。ERC-672 标准定义了一种点对点的流量平衡模型,eip672 的作用就是提供了便捷的流量平衡解决方...

    3 年前

相关推荐

    暂无文章