From d24fc9790d965ac53d4180b65da288aee21cb019 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Tue, 2 Jun 2020 10:42:43 -0700 Subject: [PATCH] feat: add useScript and useStylesheet hooks --- src/hooks/useScript.js | 21 +++++++++++++++++++++ src/hooks/useStylesheet.js | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/hooks/useScript.js create mode 100644 src/hooks/useStylesheet.js 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;