Files
public-blog/components/blog/button-client.tsx

30 lines
760 B
TypeScript

'use client'
import { useEffect, useRef } from 'react'
export function ClientButton({
children,
onClick,
...props
}: {
children?: React.ReactNode
onClick?: ((event: React.MouseEvent<HTMLButtonElement>) => void) | string
} & React.ButtonHTMLAttributes<HTMLButtonElement>) {
const btnRef = useRef<HTMLButtonElement>(null)
useEffect(() => {
if (!btnRef.current) return
if (typeof onClick === 'string') {
btnRef.current.onclick = onClick as unknown as (e: Event) => void
} else if (typeof onClick === 'function') {
btnRef.current.onclick = (e: Event) => onClick(e as unknown as React.MouseEvent<HTMLButtonElement>)
}
}, [onClick])
return (
<button ref={btnRef} {...props}>
{children}
</button>
)
}