Tab增加被动切换标签页的功能。
This commit is contained in:
		| @@ -1,20 +1,30 @@ | ||||
| import cx from 'clsx'; | ||||
| import { isEqual } from 'lodash-es'; | ||||
| import { useCallback, useState } from 'react'; | ||||
| import { isEqual, isNil } from 'lodash-es'; | ||||
| import { useCallback, useEffect, useState } from 'react'; | ||||
| import styles from './Tab.module.css'; | ||||
|  | ||||
| type TabProps = { | ||||
|   tabs: { title: string; id: unknown }[]; | ||||
|   activeTab?: unknown; | ||||
|   onActive?: (id: unknown) => void; | ||||
| }; | ||||
|  | ||||
| export function Tab({ tabs = [], onActive }: TabProps) { | ||||
|   const [active, setActive] = useState(0); | ||||
| export function Tab({ tabs = [], activeTab, onActive }: TabProps) { | ||||
|   const [active, setActive] = useState(() => | ||||
|     isNil(activeTab) ? 0 : tabs.findIndex((tab) => isEqual(tab.id, activeTab)), | ||||
|   ); | ||||
|   const handleActivate = useCallback((index: number) => { | ||||
|     setActive(index); | ||||
|     onActive?.(tabs[index].id); | ||||
|   }, []); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     const activeIndex = tabs.findIndex((tab) => isEqual(tab.id, activeTab)); | ||||
|     if (!isNil(activeIndex) && !isEqual(activeIndex, -1) && !isEqual(activeIndex, active)) { | ||||
|       setActive(activeIndex); | ||||
|     } | ||||
|   }, [activeTab]); | ||||
|  | ||||
|   return ( | ||||
|     <div className={styles.tabs_container}> | ||||
|       {tabs.map((tab, index) => ( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user