react.js antd-table 可编辑表格验证
最近做需求,需要在一个表格里编辑字段,验证提交.项目用的是antd的组件,看了下table组件,官网有给编辑的例子,好咧,拿过来用了下,发现问题.官网的实现写得很复杂,而且最主要的一点是只能在输入框获取焦点时调验证规则.但是在表格外面不能调用验证方法调用.与实际需求不符合,于是自己写了一个,记录下来.
需求: 表格输入时验证字段,提交时点击验证字段
主要思路: 先写好字段验证错误的样式,设置一个字段,通过字段动态增加样式来实现验证提示的效果
这个表格是放在一个弹框里的,弹框组件
updateForm.tsx
import React, { useState, useEffect } from \'react\'import { Form, Button, Input, Modal, Select, Row, Col, DatePicker, Table } from \'antd\'
import styles from \'./style.less\'
const UpdateForm: React.FC = (props) => {
const [sourceData, setSourceData] = useState([])
const {
onSubmit: handleUpdate,
onCancel: handleUpdateModalVisible,
updateModalVisible,
} = props
// 获取表格字段填写的值
const changeValue = (e: any, row: any) => {
const newData = [...sourceData]
const index = newData.findIndex(item => row.fieldCode === item.fieldCode)
const item = newData[index]
item.value = e.target.value
if (item.value) { // 通过errorFiled这个字段来判断当前的输入是否通过校验
item.errorFiled = false
} else {
item.errorFiled = true
}
newData.splice(index, 1, {
...item,
})
setSourceData(newData)
}
const columns = [
{
title: \'业务字段名称\',
dataIndex: \'fieldName\',
width: \'45%\',
},
{
title: \'业务字段内容\',
dataIndex: \'value\',
editable: true,
render: (_, record: any) => (
<>
<input
style={{ width: \'90%\' }}
className={`${record.errorFiled ? styles.errorinput : \'\'} ${styles.tableinput}`}
onChange={(e) => changeValue(e, record)}
value={record.value}
/>
<div style={{ display: record.errorFiled ? \'block\' : \'none\' }} className={styles.tabletip}>{record.fieldName}必填</div>
</>
),
},
]
const sourceData = [
{
key: \'0\',
fieldName: \'电票质押合同编号\',
value: \'\',
},
{
key: \'1\',
fieldName: \'电票票号\',
value: \'\',
},
{
key: \'2\',
fieldName: \'借款人名称\',
value: \'\',
},
]
setSourceData(sourceData) // 如果表格数据是后台获取,也是一样的,得到数据后使用setSourceData赋值
// 提交用户信息
const handleSubmit = () => {
const fieldsValue = {}
// 提交时验证一下表格里的数据
const newData = []
let flag = false
sourceData.some((item: any) => {
const obj = { ...item }
if (!item.value) {
obj.errorFiled = true
flag = true
}
newData.push(obj)
})
if (flag) {
setSourceData(newData)
return
}
fieldsValue.businessFields = sourceData
console.log(234, sourceData)
handleUpdate(fieldsValue) // 传值给父组件
}
const renderFooter = () => {
return (
<>
<Button onClick={() => handleUpdateModalVisible()}>取消</Button>
<Button onClick={handleSubmit}>确定</Button>
</>
)
}
return (
<Modal
width={840}
bodyStyle={{ padding: \'32px 40px 48px\' }}
destroyOnClose
title=\'添加增信品种\'
visible={updateModalVisible}
footer={renderFooter()}
maskClosable={false}
onCancel={() => handleUpdateModalVisible()}
>
<>
<Table
bordered
dataSource={sourceData}
columns={columns}
pagination={false}
rowKey=\'fieldCode\'
style={{ maxHeight: \'350px\', overflow: \'auto\' }}
/>
</>
</Modal>
)
}
export default UpdateForm
父组件调用
father.tsx
import CreateForm from \'./components/CreateForm\'const TableList: React.FC<{}> = () => {
const [createModalVisible, handleModalVisible] = useState<boolean>(false)
return (
<div>
<Button type=\'primary\' onClick={() => {
handleModalVisible(true)
}}>
新建
</Button>
<CreateForm
onCancel={() => handleModalVisible(false)}
onConfirm={(value) => {
// 提交事件
}}
modalVisible={createModalVisible}
/>
</div>
)
}
样式文件
style.less
.tableinput {
padding-left: 6px;
}
.errorinput {
border: 1px solid #ff4d4f;
}
.tabletip {
color: #ff4d4f;
}
以上是 react.js antd-table 可编辑表格验证 的全部内容, 来源链接: utcz.com/z/382411.html