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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu