<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用者點選修改按鈕時直接在彈出框的當前頁面內直接再次修改點選行相關資訊:
點選修改當事人資訊時,直接將當前改為輸入框,並將資訊展示,同時操作欄內的內容變為儲存和取消;
我這裡是使用的antd元件內的可編輯表格;當然原生的也可以做,以前也做過;
這裡的關鍵是點選修改按鈕時,令當前行的表格變為輸入框,並展示資料;
給資料每一項加上 editable: true屬性,並通過該屬性控制 渲染的是資料還是可修改的輸入框
這裡是使用的useState()方法來進行狀態控制的;
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為資料來源,
功能實現。
首先定義一個空物件
const [dataSelect, setDataSelect] = React.useState({})
給這個物件附上不同值,但不會把原來的覆蓋的掉
const select = (e, item, type) => { const data = { ...dataSelect } if (type == 'price') { setSelectNO(e) data.min_price = item.min_price data.max_price = item.max_price setDataSelect(data) console.log(data) return } if (type == 'optionsCity') { setCity(e) data.city = item.text setDataSelect(data) console.log(data) return } }
原理用一個第三方的值,作為中間變數。每次都是附上最新的data。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45