给ActionIcon增加Ref转发以方便控制DOM。

This commit is contained in:
徐涛 2025-03-31 15:04:16 +08:00
parent cb9a01109e
commit 6643eae433

View File

@ -1,15 +1,16 @@
import { Icon, IconProps } from '@iconify/react/dist/iconify.js'; import { Icon, IconProps } from '@iconify/react/dist/iconify.js';
import cx from 'clsx'; import cx from 'clsx';
import { MouseEvent, MouseEventHandler, useCallback } from 'react'; import { MouseEvent, MouseEventHandler, RefObject, useCallback } from 'react';
import styles from './ActionIcon.module.css'; import styles from './ActionIcon.module.css';
type ActionIconProps = { type ActionIconProps = {
icon: IconProps['icon']; icon: IconProps['icon'];
onClick?: MouseEventHandler<HTMLButtonElement>; onClick?: MouseEventHandler<HTMLButtonElement>;
extendClassName?: HTMLButtonElement['className']; extendClassName?: HTMLButtonElement['className'];
ref: RefObject<HTMLButtonElement>;
}; };
export function ActionIcon({ icon, onClick, extendClassName }: ActionIconProps) { export function ActionIcon({ icon, onClick, extendClassName, ref }: ActionIconProps) {
const handleClick = useCallback( const handleClick = useCallback(
(event: MouseEvent<HTMLButtonElement>) => { (event: MouseEvent<HTMLButtonElement>) => {
onClick?.(event); onClick?.(event);
@ -18,7 +19,11 @@ export function ActionIcon({ icon, onClick, extendClassName }: ActionIconProps)
); );
return ( return (
<button type="button" onClick={handleClick} className={cx(styles.action_icon, extendClassName)}> <button
type="button"
onClick={handleClick}
className={cx(styles.action_icon, extendClassName)}
ref={ref}>
<Icon icon={icon} className={styles.icon} /> <Icon icon={icon} className={styles.icon} />
</button> </button>
); );