diff --git a/src/indexes/Indexes.tsx b/src/indexes/Indexes.tsx index b634bc0f5..5796aa3ac 100644 --- a/src/indexes/Indexes.tsx +++ b/src/indexes/Indexes.tsx @@ -3,11 +3,11 @@ import throttle from 'lodash/throttle'; import cls from 'classnames'; import { TdIndexesProps } from './type'; import { StyledProps } from '../common'; -import useConfig from '../_util/useConfig'; import useDefaultProps from '../hooks/useDefaultProps'; +import parseTNode from '../_util/parseTNode'; +import { usePrefixClass } from '../hooks/useClass'; import { indexesDefaultProps } from './defaultProps'; import { IndexesProrvider } from './IndexesContext'; -import parseTNode from '../_util/parseTNode'; export interface IndexesProps extends TdIndexesProps, StyledProps {} @@ -24,14 +24,12 @@ interface ChildNodes { } const Indexes: React.FC = (props) => { - const { indexList, className, style, sticky, stickyOffset, children, onChange } = useDefaultProps( + const { indexList, className, style, sticky, stickyOffset, children, onChange, onSelect } = useDefaultProps( props, indexesDefaultProps, ); - const { classPrefix } = useConfig(); - const prefix = classPrefix; - const name = `${prefix}-indexes`; + const indexesClass = usePrefixClass('indexes'); // 当前高亮index const [activeSidebar, setActiveSidebar] = useState(null); @@ -78,8 +76,8 @@ const Indexes: React.FC = (props) => { const betwixt = offset < curGroup.height && offset > 0 && scrollTop > stickyTop; childNodes.current.forEach((child, index) => { const { ele } = child; - const wrapperClass = `${name}-anchor__wrapper`; - const headerClass = `${name}-anchor__header`; + const wrapperClass = `${indexesClass}-anchor__wrapper`; + const headerClass = `${indexesClass}-anchor__header`; const wrapper = ele.querySelector(`.${wrapperClass}`); const header = ele.querySelector(`.${headerClass}`); if (index === curIndex) { @@ -119,7 +117,7 @@ const Indexes: React.FC = (props) => { }; const handleSidebarItemClick = (index: string | number) => { - props.onSelect?.(index); + onSelect?.(index); setActiveSidebarAndTip(index); scrollToByIndex(index); }; @@ -148,7 +146,7 @@ const Indexes: React.FC = (props) => { const { touches } = event; const { clientX, clientY } = touches[0]; const target = document.elementFromPoint(clientX, clientY); - if (target && target.className === `${name}__sidebar-item` && target instanceof HTMLElement) { + if (target && target.className === `${indexesClass}__sidebar-item` && target instanceof HTMLElement) { const { index } = target.dataset; const curIndex = indexListMemo.find((idx) => String(idx) === index); if (curIndex !== undefined && activeSidebar !== index) { @@ -178,7 +176,8 @@ const Indexes: React.FC = (props) => { useEffect(() => { onChange?.(activeSidebar); - }, [activeSidebar, onChange]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [activeSidebar]); useEffect(() => { parentRect.current = indexesRef.current?.getBoundingClientRect() || { top: 0 }; @@ -205,16 +204,16 @@ const Indexes: React.FC = (props) => { return (
-
+
{indexListMemo.map((listItem) => (
= (props) => { > {listItem} {showSidebarTip && activeSidebar === listItem && ( -
{activeSidebar}
+
{activeSidebar}
)}
))} diff --git a/src/indexes/IndexesAnchor.tsx b/src/indexes/IndexesAnchor.tsx index d0e079b4f..cc6b346e0 100644 --- a/src/indexes/IndexesAnchor.tsx +++ b/src/indexes/IndexesAnchor.tsx @@ -1,19 +1,16 @@ import React, { FC, useContext, useEffect, useRef } from 'react'; import cls from 'classnames'; -import useConfig from '../_util/useConfig'; import { StyledProps } from '../common'; import parseTNode from '../_util/parseTNode'; -import useDefaultProps from '../hooks/useDefaultProps'; +import { usePrefixClass } from '../hooks/useClass'; import { TdIndexesAnchorProps } from './type'; import { IndexesContext } from './IndexesContext'; export interface IndexesAnchorProps extends TdIndexesAnchorProps, StyledProps {} const IndexesAnchor: FC = (props) => { - const { children, index, className, style } = useDefaultProps(props, {}); - const { classPrefix } = useConfig(); - const prefix = classPrefix; - const name = `${prefix}-indexes-anchor`; + const { children, index, className, style } = props; + const indexesAnchorClass = usePrefixClass('indexes-anchor'); const indexesAnchorRef = useRef(null); const { relation } = useContext(IndexesContext); @@ -23,10 +20,10 @@ const IndexesAnchor: FC = (props) => { }, []); return ( -
-
-
{parseTNode(children)}
-
{index}
+
+
+
{parseTNode(children)}
+
{index}
);