因爲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中
待續。。。