diff --git a/src/hooks/useScript.js b/src/hooks/useScript.js new file mode 100644 index 000000000..e39631f8a --- /dev/null +++ b/src/hooks/useScript.js @@ -0,0 +1,21 @@ +import { useEffect, useState } from 'react'; + +const useScript = (src) => { + const [loaded, setLoaded] = useState(false); + + useEffect(() => { + const script = window.document.createElement('script'); + + script.async = true; + script.crossOrigin = 'anonymous'; + script.onload = () => setLoaded(true); + script.src = src; + document.body.appendChild(script); + + return () => document.body.removeChild(script); + }, [src]); + + return loaded; +}; + +export default useScript; diff --git a/src/hooks/useStylesheet.js b/src/hooks/useStylesheet.js new file mode 100644 index 000000000..6c6323aca --- /dev/null +++ b/src/hooks/useStylesheet.js @@ -0,0 +1,21 @@ +import { useEffect, useState } from 'react'; + +const useStylesheet = (src) => { + const [loaded, setLoaded] = useState(false); + + useEffect(() => { + const link = window.document.createElement('link'); + + link.rel = 'stylesheet'; + link.crossOrigin = 'anonymous'; + link.onload = () => setLoaded(true); + link.href = src; + document.head.appendChild(link); + + return () => document.head.removeChild(link); + }, [src]); + + return loaded; +}; + +export default useStylesheet;