antd Tabs 的设计为什么要暴露一个onEdit,而不提供add和remove的传递

下面是antd Tabs的DEMO提供

...
onEdit(target, action) {this[action](target)},
...
render() {
  return (
      <Tabs
        onChange={this.onChange}
        activeKey={this.state.activeKey}
        type="editable-card"
        onEdit={this.onEdit}
      >
        {this.state.panes.map(pane => <TabPane tab={pane.title} key={pane.key}>{pane.content}</TabPane>)}
      </Tabs>
    );
}

我的项目中使用的是纯函数的写法,在遇到add 和 remove的时候遇到了这个问题,不知道如何将add和remove写入,而onEdit的this我也传入不了。

补充:
可能描述的不是很清楚,我期待的是组件是以下方式添加add 和 remove:

<Tabs
  onChange={this.onChange}
  activeKey={this.state.activeKey}
  type="editable-card"
  onAdd={this.onAdd}
  onRemove={this.onRemove}
>

</Tabs>

在项目中 我并没有使用react的生命周期,而是通过传递参数的形式用纯函数来构造component,以下是我该模块部分代码:

const TabsModel = ({
    activeKey, onChange, onAdd, onRemove, paneList, onEdit
}) => {
    
    return (
        <Tabs
            onChange={onChange}
            activeKey={activeKey+''}
            type="editable-card"
            onEdit={onEdit}
        >
            {
                paneList.map(item => <TabPane tab={item.name} key={item.id}>{item.content}</TabPane>)
            }
            
        </Tabs>
    );
}

然而onEdit内部的 this 是我无法提供的,我该如何将DEMO写法转化成我的代码风格呢?

阅读 8.1k
4 个回答

为了精简 API 数量。

onEdit={this.onEdit.bind(this)}

如果需要传入参数,直接写在this的后面

onEdit(参数){

}

如果在同一个组件当中不用传this.
对this.state.panes,操作(setState)时, 就会重新渲染新的tabs,

补充:
为什么不用createClass去创建生命周期呢...

看官方文档onEdit----新增和删除页签的回调,在 type="editable-card" 时有效,在Add和remove都会调用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题