SEMI DESIGN 源码学习(三)选择器
Select 组件位于 packages/semi-ui/select/index.tsx, 一共 1467 行代码,看起来挺复杂的。

照旧是一些属性接口的定义

值得留意的是这里用了 type 和 interface 两种关键字来定义,其中 type 是类型别名,用于给各种类型定义别名,让 TS 写起来更简洁、清晰。 interface 是 接口,用于描述一个对象。
一般 使用组合或者交叉类型的时候,用 type, 要用类的 extends 或 implements 时,用 interface。
类似于 Input,Select 组件同样有一个 foundation 属性,不过这里是 SelectFoundation

同样是传入一个 adapter 用来管理内部值,处理事件,这样可以复用这一套逻辑。

最后的渲染函数返回一个 Popover 组件

内部判断是否使用 useCustomTrigger 再判断是否是多选。

Option 和 OptionGroup 比较简单,就是普通的无状态组件。

后面研究一下这个 adapter 模式,本文完。
转载自:https://juejin.cn/post/7284196027148927016