需求:用户点击修改按钮时直接在弹出框的当前页面内直接再次修改点击行相关信息:
效果如下:
点击修改当事人信息时,直接将当前改为输入框,并将信息展示,同时操作栏内的内容变为保存和取消;
具体做法:
我这里是使用的antd组件内的可编辑表格;当然原生的也可以做,以前也做过;
这里的关键是点击修改按钮时,令当前行的表格变为输入框,并展示数据;
给数据每一项加上 editable: true属性,并通过该属性控制 渲染的是数据还是可修改的输入框
这里是使用的useState()方法来进行状态控制的;
- 关于 useState 的用法是,需要传入一个参数作为状态的初始值,当函数执行后会返回两个值,一个是当前状态的属性,一个是修改状态的方法。
- 使用方法更新数据后会触发render()重新渲染数据
const [editingKey, setEditingKey] = useState(''); // 是否正在修改 const isEditing = (record: Item) => record.key === editingKey; // 修改按钮 const edit = (record: Item) => { form.setFieldsValue({ ...record }); setEditingKey(record.key); }; // 取消 const cancel = () => { setEditingKey(''); }; // 保存 const save = async (id: React.Key) => { try { const row = (await form.validateFields()) console.log('row', row) row.id = id onSave(row) setEditingKey(''); } catch (err) { console.log(err) } };
我这里给useState一个初始值为空,点击修改后使用setEditingKey()方法(useState返回的方法)将useState数据的值赋值为当前行的唯一key值,这样二者相等,就可以区别点击的是哪一条数据的按钮了;点击取消setEditingKey(’’)重新置空;
判断逻辑:
// 是否正在修改 const isEditing = (record: Item) => record.key === editingKey;
渲染数据前进行判断:
const mergedColumns = columns.map(col => { if (!col.editable) { return col; } return { ...col, onCell: (record: Item) => ({ record, dataIndex: col.dataIndex, title: col.title, editing: isEditing(record), }), }; });
根据数据状态判断渲染的是表格合适输入框:
const EditableCell: React.FC<EditableCellProps> = ({ editing, dataIndex, title, record, index, children, ...restProps }) => { return ( <td {...restProps}> {editing ? ( <Form.Item name={dataIndex} style={{ margin: 0 }} rules={[ { required: true, message: `请填写${title}!`, }, ]} > <Input /> </Form.Item> ) : ( children )} </td> ); };
导出:
return ( <Form form={form} component={false}> <Table components={{ body: { cell: EditableCell, }, }} bordered pagination={false} dataSource={dataSource} {...otherProps} columns={mergedColumns} rowClassName="editable-row" /> </Form> );
其中dataSource为数据源,
功能实现;
数据库技术:react中useState的使用:实现在当前表格直接更改数据地址:https://blog.csdn.net/weixin_44134588/article/details/111028654
需要了解更多数据库技术:react中useState的使用:实现在当前表格直接更改数据,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/dtteaching/631849.html