新手求助 如何实现Tabs标签的可编辑?
希望实现Tabs标签页的文字可以编辑;目前我的思路是给Tab元素添加一个input输入框,点击时触发,鼠标移开时保存输入文字,但不知道代码该如何写;
这是我已有的代码,展示了Tabs标签页,并实现了新增删除功能;
框架语言是React+JS,使用了Antd组件库;
程序代码:
import { Tabs, Input } from 'antd'; import React from 'react'; const { TabPane } = Tabs; const initialPanes = [ { title: 'Tab 1', content: 'Content of Tab 1', key: '1' }, { title: 'Tab 2', content: 'Content of Tab 2', key: '2' }, { title: 'Tab 3', content: 'Content of Tab 3', key: '3', }, ]; class Demo extends { newTabIndex = 0; state = { activeKey: initialPanes[0].key, panes: initialPanes, }; onChange = (activeKey) => { this.setState({ activeKey }); }; onEdit = (targetKey, action) => { this[action](targetKey); }; add = () => { const { panes } = this.state; const activeKey = `newTab${this.newTabIndex++}`; const newPanes = [...panes]; newPanes.push({ title: 'New Tab', content: 'Content of new Tab', key: activeKey }); this.setState({ panes: newPanes, activeKey, }); }; remove = (targetKey) => { const { panes, activeKey } = this.state; let newActiveKey = activeKey; let lastIndex; panes.forEach((pane, i) => { if (pane.key === targetKey) { lastIndex = i - 1; } }); const newPanes = panes.filter((pane) => pane.key !== targetKey); if (newPanes.length && newActiveKey === targetKey) { if (lastIndex >= 0) { newActiveKey = newPanes[lastIndex].key; } else { newActiveKey = newPanes[0].key; } } this.setState({ panes: newPanes, activeKey: newActiveKey, }); }; render() { const { panes, activeKey } = this.state; return ( // eslint-disable-next-line react/react-in-jsx-scope // eslint-disable-next-line react/jsx-filename-extension <Tabs type="editable-card" onChange={this.onChange} activeKey={activeKey} onEdit={this.onEdit} > <Input type="text" /> {panes.map((pane) => ( <TabPane tab={pane.title} key={pane.key} closable={pane.closable}> {pane.content} </TabPane> ))} </Tabs> ); } } export default Demo;
如果大佬可以指点一下思路,或能够提供具体代码的话更好,万分感谢!