useLoadScript 
按需加载js 
text
import { useEffect, useRef, useState } from 'react'
type Cache = {
  dom: HTMLScriptElement
  lib: any
}
const map = new Map<string, Cache>()
export const useLoadScript = <T>(
  name: string,
  src: string,
  deps: any[] = []
): [T, boolean] => {
  const ref = useRef<T>()
  const [loading, setLoading] = useState(true)
  const loadLib = () => {
    const cache = map.get(name) || ({} as Cache)
    cache.lib = window[name]
    map.set(name, cache)
    ref.current = cache.lib
    setLoading(false)
  }
  useEffect(() => {
    const cache = map.get(name) || ({} as Cache)
    if (cache.lib) {
      ref.current = cache.lib
      setLoading(false)
      return
    }
    if (cache.dom) {
      cache.dom.addEventListener('load', loadLib)
      return () => cache.dom.removeEventListener('load', loadLib)
    }
    const script = document.createElement('script')
    script.src = src
    script.type = 'text/javascript'
    script.crossOrigin = 'true'
    script.addEventListener('load', loadLib)
    document.body.append(script)
    cache.dom = script
    map.set(name, cache)
    return () => script.removeEventListener('load', loadLib)
  }, deps)
  return [ref.current, loading]
}Use: 
tsx
const [Hls, loading] = useLoadScript<Hls>(
	'Hls',
	'https://cdn.jsdelivr.net/npm/hls.js@alpha'
)Contributors 
 作者:Long Mo
 字数统计:140 字
 阅读时长:1 分钟
文章作者:Long Mo
版权声明: 本博客所有文章除特别声明外,均采用  CC BY-NC-SA 4.0  许可协议。转载请注明来自 Longmo Docs ! 
