useScriptTag

Tags:

A React Hook that helps to apply a script tag to the document with ease in React.

Demo

Source
Script Loaded:
false

Usage

See API for more details.

Source

Click links below to view source on GitHub.

API

const { scriptTag, load, unload } = useScriptTag(src, onLoaded, options)

Src

A string that represents the URL of the script to be loaded.

OnLoaded

A function that will be called when the script is loaded.

Options

export type ReferrerPolicy =
  | 'no-referrer'
  | 'no-referrer-when-downgrade'
  | 'origin'
  | 'origin-when-cross-origin'
  | 'same-origin'
  | 'strict-origin'
  | 'strict-origin-when-cross-origin'
  | 'unsafe-url'

export interface UseScriptTagOptions {
  /**
   * Whether load script immediately at mount
   *
   * @defaultValue true
   */
  immediate?: boolean
  /**
   * Whether the script is loaded asynchronously
   *
   * @defaultValue true
   */
  async?: boolean
  /**
   * The type of the script
   *
   * @defaultValue 'text/javascript'
   */
  type?: string
  /**
   * Whether to control the loading of the script manually
   *
   * @defaultValue false
   */
  manual?: boolean
  /**
   * The value of the `crossorigin` attribute
   *
   * @defaultValue undefined
   */
  crossOrigin?: 'anonymous' | 'use-credentials'
  /**
   * The value of the `referrerpolicy` attribute
   *
   * @defaultValue undefined
   */
  referrerPolicy?: ReferrerPolicy
  /**
   * Whether the script is a module script
   *
   * @defaultValue undefined
   */
  noModule?: boolean
  /**
   * Whether the script is deferred
   *
   * @defaultValue false
   */
  defer?: boolean
  /**
   * Additional attributes to be set on the script element
   *
   * @defaultValue {}
   */
  attrs?: Record<string, string>
}

Returns

export type UseScriptTagReturns = {
  /**
   * The script element Ref
   */
  scriptTag: MutableRefObject<HTMLScriptElement | null>
  /**
   * Load the script
   *
   * @param waitForScriptLoad Whether to wait for the script to be loaded, `true` by default
   */
  load: (waitForScriptLoad?: boolean) => Promise<HTMLScriptElement | boolean>
  /**
   * Unload the script
   */
  unload(): void
}