【新手向 】手把手开发一个易于扩展的 Tabs 组件

在日常的业务开发过程中,笔者发现有很多优秀的组件设计模式,善用这些模式可以有效提升代码的可维护性,但往往很多“新手”开发者还不熟练,导致写出来的代码难以扩展。这篇文章将从零开始分享如何开发一个易于扩展的 Tabs 组件。

下面的内容会尽可能详细地说明用到的知识点,不过这篇文章的重点并不是 Tabs 组件的实现噢😯。

废话少说,先看效果:

在线 codesandbox:codesandbox.io/s/jolly-fro…

效果很简单,每次点击一个 Tab 元素,将内容区域切换成展示相应的内容。类似的场景有很多,有时只是皮肤不一样,但实现逻辑和效果都是相同的。例如 Antd 中的 Tabs 组件:

不考虑过场动画、兼容滚动、动态增减的场景,一个 Tabs 组件其实非常简单,相信大部分人很快就能做出来。

陷阱 🤔

首先,从 UI 的角度思考组件拆分,可以看到很明显每个 Tab 项是重复的,它们都有一个图标、一个名字、两种展示状态,响应点击事件等等。

按照这个思路设计 Tab 组件,代码大概是这样:

interface TabProps extends HTMLAttributes<HTMLElement> {active: boolean;name: string;iconType: Parameters<typeof Icon>["0"]["type"];
}

function Tab(props: TabProps) {const { active, name, iconType, className, ...rest } = props;return (<liclassName={clsx("tab", className, {active: active})}{...rest}><Icon type={iconType} className="icon" />{name}</li>);
} 

我们让 TabProps 继承自 HTMLAttributes<HTMLElement>,那么通用的 props 例如 style/className/onClick 就可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值