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

背景

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

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

废话说完,上代码

代码

用法:

<InputWithError
   className={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}>
				<div
					className={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 这种库时,就要官方有没有提供接口出来了。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您解答这个问题。基于Ant Design React,您可以使用Table组件来实现一个可动态添加和编辑表格内容的表格。 首先,您需要在代码中引入Table组件: ``` import { Table } from 'antd'; ``` 然后,您需要定义表格的列和数据源。您可以将这些数据定义为组件的state,以便在添加和编辑表格内容时进行更新。例如: ``` state = { columns: [ { title: '姓名', dataIndex: 'name', key: 'name', }, { title: '年龄', dataIndex: 'age', key: 'age', }, { title: '地址', dataIndex: 'address', key: 'address', }, ], data: [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', }, ], }; ``` 接下来,您需要在render方法中使用Table组件来渲染表格,并将列和数据源传递给它。例如: ``` <Table columns={this.state.columns} dataSource={this.state.data} /> ``` 现在,您可以使用Ant Design的Form组件来实现添加和编辑表格内容的功能。您可以为表格添加一个“添加”按钮,单击该按钮可以弹出一个包含表单的模态框。用户可以在表单中输入新的行数据,然后单击“确定”按钮将新的行添加到表格中。 您还可以为表格的每一行添加一个“编辑”按钮。单击该按钮可以弹出一个包含表单的模态框,并自动填充该行的数据。用户可以在表单中编辑行数据,然后单击“确定”按钮将更新后的行数据保存到表格中。 最后,为了实现可动态添加表格内容的功能,您需要在“添加”按钮单击事件中更新数据源state。例如: ``` handleAdd = () => { const { data } = this.state; const newData = { key: data.length + 1, name: `Edward King ${data.length + 1}`, age: 32, address: `London, Park Lane no. ${data.length + 1}`, }; this.setState({ data: [...data, newData], }); }; ``` 这样,您就可以实现一个基于Ant Design React的可动态添加和编辑表格内容的表格了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值