AntDesign React 简单封装一个带错误提示的输入框

本文主要是介绍AntDesign React 简单封装一个带错误提示的输入框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

没想到官方没有提供纯粹的带错误提示的输入框,官方提供了启用错误样式 status 属性。但是展示错误信息提示却需要捆绑FormForm.Item。说实话有点不友好,我就一个简单的输入框,想要用户输入时用正则校验,错误时提示一些错误信息。然后表单数据就这么一个输入,完全没必要写一整个Form 来管理提交数据,为了这一个输入对接 Form 那一堆 API 属实是水代码。

加一个错误提示也不难,写点小动画体验就已经很好了。至于要不要单独封装放到 NPM,嗯感觉是个哲学问题。像是 classnames 这种工具代码就一点点代码,但是放到 NPM 供大家使用就很方便。

废话说完,上代码

代码

用法:

<InputWithErrorclassName={css.urlInput}placeholder="输入 URL "size="large"value={urlInput}onChange={handleURLInputChange}errorMsg={urlInput.length ? "测试数据" : ""}
/>

InputWithError/index.tsx:

import { Input, InputProps } from "antd";
import React from "react";
import css from "./index.module.scss";
import classNames from "classnames";const InputWithError: React.FC<{ errorMsg?: string } & InputProps> = function (props
) {return (<div className={props.className}><Input {...{...props, className: "", status: props.errorMsg ? "error" : ""}} /><div className={css.hintContainer}><divclassName={classNames(css.text,props.errorMsg ? css.show : css.hide)}>{props.errorMsg}</div></div></div>);
};export default InputWithError;

index.module.scss


.hintContainer {overflow-y: hidden;.text {transition: height .4s,color .4s;}.text.hide {height: 0px;color: transparent;}.text.show {height: 24px;color: #ff4d4f;}}

效果:
在这里插入图片描述

讨论

和官方的差别:

  1. 官方在父容器上允许溢出,这样显示错误信息时不会像我这样推动下面的元素
  2. 官方的消失动画是等动画结束再卸载组件,所以官方的错误信息消失时会更自然一些。

关于动画结束再卸载组件其实也是一个话题,我练手时用的 VueTransition 组件,它提供了六个动画相关的类来实现入场和退场动画,然后 React 自然也有类似的。我对这个动画结束再卸载的技术调研过一次,最终结论是他们都是依赖底层浏览器提供的动画事件。是的,浏览器原生就有相关的事件提供,比如你可以监听一个函数一次 CSS 动画什么时候结束。所以如果写原生 JS 的话,就是监听这个结束事件,在事件响应里面移除动画元素就行。但是用 Vue 或这 React 这种库时,就要官方有没有提供接口出来了。

这篇关于AntDesign React 简单封装一个带错误提示的输入框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986297

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代