mirror of
https://github.com/zhigang1992/react.git
synced 2026-04-26 23:04:55 +08:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import React, { useEffect, useMemo } from 'react'
|
|
import withDefaults from '../utils/with-defaults'
|
|
import { useTabsContext } from './tabs-context'
|
|
|
|
interface Props {
|
|
label: string | React.ReactNode
|
|
value?: string
|
|
disabled?: boolean
|
|
}
|
|
|
|
const defaultProps = {
|
|
disabled: false,
|
|
}
|
|
|
|
export type TabsItemProps = Props & typeof defaultProps
|
|
|
|
const TabsItem: React.FC<React.PropsWithChildren<TabsItemProps>> = ({
|
|
children,
|
|
value: userCustomValue,
|
|
label,
|
|
disabled,
|
|
}) => {
|
|
const value = useMemo(() => userCustomValue || `${label}`, [userCustomValue, label])
|
|
const { register, unregister, currentValue } = useTabsContext()
|
|
const isActive = useMemo(() => currentValue === value, [currentValue, value])
|
|
|
|
useEffect(() => {
|
|
register && register({ value, label, disabled })
|
|
return () => {
|
|
unregister && unregister({ value, label, disabled })
|
|
}
|
|
}, [])
|
|
|
|
/* eslint-disable react/jsx-no-useless-fragment */
|
|
return isActive ? <>{children}</> : null
|
|
}
|
|
|
|
export default withDefaults(TabsItem, defaultProps)
|
|
/* eslint-enable */
|