Skip to content

DOM 与浏览器 Hooks

@mbjia/hooks

DOM 与浏览器 Hooks

用于处理元素尺寸、图片加载、点击外部、页面标题等浏览器能力。

适合处理元素尺寸、图片加载、点击外部、页面标题等浏览器能力。

useElementSize

ts
const [ref, size] = useElementSize<HTMLDivElement>()

返回 callback ref 和元素宽高。

tsx
const [ref, size] = useElementSize()

return <div ref={ref}>{size.width} x {size.height}</div>

返回值:

下标类型说明
0callback ref绑定到目标元素。
1{ width; height }元素尺寸。

useImageLoad

ts
const [imgMeta, loading] = useImageLoad(url, 320)

返回:

ts
{
  src: string
  width: number
  height: number
  isError: boolean
}

图片加载失败会自动重试 3 次。

参数类型说明
urlstring图片地址。
widthnumber目标宽度。
返回值类型说明
imgMeta{ src; width; height; isError }图片信息。
loadingboolean是否加载中。

useClickOutside

tsx
const ref = useClickOutside(() => setOpen(false))

return <div ref={ref}>点击外部关闭</div>
参数类型说明
callback() => void点击外部时触发。

useCopy

用于把字符串或数字复制到系统剪贴板,并记录最近一次复制成功的文本。

tsx
const [copyText, copy] = useCopy()

return (
  <button onClick={() => copy('asset_1001')}>
    {copyText ? `已复制 ${copyText}` : '复制资源 ID'}
  </button>
)

入参:

参数类型说明
copy(value)string | number | undefined需要复制的内容。源码中无值时会把 copyText 置为空字符串。

返回值:

下标类型说明
0string | undefined最近一次复制成功的文本;复制失败或传入空值时为空字符串。
1(text: string) => void复制函数。实现中兼容 number,类型声明目前只标为 string

useUserAgent

读取当前浏览器的 window.navigator.userAgent,返回源码中的 isSpider 状态。

tsx
const [isSpider] = useUserAgent()

return isSpider ? <RobotFriendlyView /> : <DefaultView />

返回值:

下标类型说明
0boolean源码当前逻辑为:当 UA 不包含 HeadlessChrome 时置为 true。命名和判断条件容易产生歧义,接入前建议确认业务预期。

usePageTitle

ts
usePageTitle('页面标题')

基于主题配置设置 document.title

MBJIA Tools 文档