因为ant Tabs组件结构较复杂,共分三部分叙述,本文为目录中第一部分(高亮)html
目录react
1、组件结构api
antd代码结构antd
rc-ant代码结构dom
一、组件树状结构ide
二、Context使用说明函数
三、rc-tabs中只在example、test中使用的组件说明this
2、Tabs关键组件功能实现spa
一、Tabs(antd)3d
二、RcTabs
三、Sentinel哨兵
四、InkTabBarNode
3、Tabs的滚动效果
ScrollableTabBarNode
上图的代码结构能够看出Rc-tab的组件较多,首先梳理组件的树状关系,梳理过程当中发现rc-tabs中有一部分组件仅用于example、test中,文章后续章节介绍
注意:
下图为仅用于仅用于example、test的组件
const SentinelContext = createReactContext({}); export const SentinelProvider = SentinelContext.Provider; export const SentinelConsumer = SentinelContext.Consumer;
Context 提供了一种在组件之间共享值的方式,而没必要显式地经过组件树的逐层传递 props,官方说明 https://react.docschina.org/docs/context.html#api
React.createContext:
const MyContext = React.createContext(defaultValue);
Context.Provider
<MyContext.Provider value={/* 某个值 */}>
Context.Consumer
<MyContext.Consumer> {value => /* 基于 context 值进行渲染*/} </MyContext.Consumer>
回调Refs,传递一个函数,这个函数中接受 React 组件实例或 HTML DOM 元素做为参数,以使它们能在其余地方被存储和访问。
详细讲解见官方文档 https://react.docschina.org/docs/refs-and-the-dom.html#callback-refs
这里Sentinel哨兵中将 sentinelEnd/start 和 panelSentinelEnd/start分别存储在this.sentinelEnd/start 和 this.panelSentinelEnd/start中
待续。。。