ant design table组件onBlur,onChange,onPressEnter事件,在编辑状态下一个字段改变另外字段根据数据库中对应的响应随之改变的方法

本例是以onBlur事件为例的,当失去焦点后携带参数访问后端获取相应的响应,然后处理。onChange,onPressEnter同理,

最终达到的效果就是“哪一行请求数据修改哪一行,提示哪一行”

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了您的问题。下面是我给出的一些代码示例供您参考: ```tsx import React, { useState, useEffect } from 'react'; import { Table, Modal, Form, Input, Button } from 'antd'; import { TableProps } from 'antd/lib/table'; interface EditItem { index: number; record: any; } const { confirm } = Modal; const EditableTable: React.FC<TableProps<any>> = (props) => { const { dataSource, columns, ...rest } = props; const [editable, setEditable] = useState<boolean[]>(dataSource.map(() => false)); const [editItem, setEditItem] = useState<EditItem>(); const toggleEditable = (index: number) => { setEditable((prevState) => prevState.map((state, i) => (i === index ? !state : state)) ); }; const handleEdit = (record: any, index: number) => { setEditItem({ record, index }); toggleEditable(index); }; const handleCancel = () => { setEditItem(undefined); setEditable((prevState) => prevState.map(() => false)); }; const handleDelete = (index: number) => { confirm({ title: 'Do you want to delete this item?', onOk() { dataSource.splice(index, 1); }, }); }; const handleOk = () => { const form = formRef.current; form?.validateFields((err, values) => { if (err) { return; } const newData = [...dataSource]; const { index, record } = editItem!; newData.splice(index, 1, { ...record, ...values }); dataSource.splice(index, 1, { ...record, ...values }); setEditable((prevState) => prevState.map(() => false)); setEditItem(undefined); }); }; const addRecord = () => { const form = formRef.current; form?.validateFields((err, values) => { if (err) { return; } const newData = [...dataSource]; newData.push(values); dataSource.push(values); }); }; const formRef = React.createRef<FormInstance>(); const EditableCell: React.FC<any> = (props) => { const { dataIndex, title, record, index, children } = props; const [editing, setEditing] = useState(false); const inputRef = React.createRef<Input>(); useEffect(() => { if (editing) { inputRef.current?.focus(); inputRef.current?.select(); } }, [editing]); const toggleEdit = () => { setEditing(!editing); setEditable((prevState) => prevState.map((state, i) => (i === index ? !state : state)) ); }; const handleKeyPress = (e: React.KeyboardEvent<HTMLInputElement>) => { if (e.key === 'Enter') { toggleEdit(); handleOk(); } }; return ( <td {...props}> {editing ? ( <Form.Item name={dataIndex} style={{ margin: 0 }} rules={[ { required: true, message: `Please Input ${title}!`, }, ]} > <Input ref={inputRef} onPressEnter={handleKeyPress} onBlur={toggleEdit} /> </Form.Item> ) : ( <div style={{ cursor: 'pointer' }} onClick={toggleEdit}> {children} </div> )} </td> ); }; const renderColumns = columns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record: any, index: number) => ({ record, index, dataIndex: col.dataIndex, title: col.title, editing: editable[index], }), render: (text: any, record: any, index: number) => ( <EditableCell>{text}</EditableCell> ), }; }); return ( <> <Table {...rest} dataSource={dataSource} columns={renderColumns} pagination={false} rowKey={(record) => record.id} title={() => ( <Button type="primary" onClick={addRecord}> Add record </Button> )} /> <Modal title="Edit record" visible={!!editItem} onOk={handleOk} onCancel={handleCancel} > <Form ref={formRef} initialValues={editItem?.record}> {columns.map((col) => ( <Form.Item key={col.dataIndex} name={col.dataIndex} label={col.title} rules={[ { required: true, message: `Please Input ${col.title}!`, }, ]} > <Input /> </Form.Item> ))} </Form> </Modal> </> ); }; export default EditableTable; ``` 这是一个使用 TypeScript、React Hooks、Ant Design 和可编辑表格的示例,在表格上可以执行增、删、改和查的操作。希望这能够为您提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值