fix(tabs): unregister when tab child unmount

This commit is contained in:
unix
2020-04-06 10:17:13 +08:00
parent 1745700e92
commit 127c9bb385
3 changed files with 10 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ export interface TabsLabelItem {
export interface TabsConfig {
register?: (item: TabsLabelItem) => void
unregister?: (item: TabsLabelItem) => void
currentValue?: string
inGroup: boolean
}

View File

@@ -18,11 +18,14 @@ const TabsItem: React.FC<React.PropsWithChildren<TabsItemProps>> = ({
children, value: userCustomValue, label, disabled,
}) => {
const value = useMemo(() => userCustomValue || `${label}`, [userCustomValue, label])
const { register, currentValue } = useTabsContext()
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 */

View File

@@ -34,9 +34,13 @@ const Tabs: React.FC<React.PropsWithChildren<TabsProps>> = ({
}
setTabs([...tabsRef.current, next])
}
const unregister = (next: TabsLabelItem) => {
const nextTabs = tabsRef.current.filter(item => item.value !== next.value)
setTabs([...nextTabs])
}
const initialValue = useMemo<TabsConfig>(() => ({
register,
register, unregister,
currentValue: selfValue,
inGroup: true,
}), [selfValue])