@@ -1081,52 +1081,36 @@ export function useRenderInfo(name = "Unknown") {
1081
1081
}
1082
1082
1083
1083
export function useScript ( src , options = { } ) {
1084
- const [ status , setStatus ] = React . useState ( ( ) => {
1085
- if ( ! src ) {
1086
- return "idle" ;
1087
- }
1088
-
1089
- return "loading" ;
1090
- } ) ;
1091
-
1092
- const cachedScriptStatuses = React . useRef ( { } ) ;
1084
+ const [ status , setStatus ] = React . useState ( "loading" ) ;
1085
+ const optionsRef = React . useRef ( options ) ;
1093
1086
1094
1087
React . useEffect ( ( ) => {
1095
- if ( ! src ) return ;
1096
-
1097
- const cachedScriptStatus = cachedScriptStatuses . current [ src ] ;
1098
- if ( cachedScriptStatus === "ready" || cachedScriptStatus === "error" ) {
1099
- setStatus ( cachedScriptStatus ) ;
1100
- return ;
1101
- }
1102
-
1103
1088
let script = document . querySelector ( `script[src="${ src } "]` ) ;
1104
1089
1105
- if ( ! script ) {
1090
+ if ( script === null ) {
1106
1091
script = document . createElement ( "script" ) ;
1107
1092
script . src = src ;
1108
1093
script . async = true ;
1109
1094
document . body . appendChild ( script ) ;
1110
1095
}
1111
1096
1112
- const handleScriptStatus = ( event ) => {
1113
- const newStatus = event . type === "load" ? "ready" : " error";
1114
- setStatus ( newStatus ) ;
1115
- cachedScriptStatuses . current [ src ] = newStatus ;
1116
- } ;
1097
+ const handleScriptLoad = ( ) => setStatus ( "ready" ) ;
1098
+ const handleScriptError = ( ) => setStatus ( " error") ;
1099
+
1100
+ script . addEventListener ( "load" , handleScriptLoad ) ;
1101
+ script . addEventListener ( "error" , handleScriptError ) ;
1117
1102
1118
- script . addEventListener ( "load" , handleScriptStatus ) ;
1119
- script . addEventListener ( "error" , handleScriptStatus ) ;
1103
+ const removeOnUnmount = optionsRef . current . removeOnUnmount ;
1120
1104
1121
1105
return ( ) => {
1122
- script . removeEventListener ( "load" , handleScriptStatus ) ;
1123
- script . removeEventListener ( "error" , handleScriptStatus ) ;
1106
+ script . removeEventListener ( "load" , handleScriptLoad ) ;
1107
+ script . removeEventListener ( "error" , handleScriptError ) ;
1124
1108
1125
- if ( options . removeOnUnmount === true ) {
1109
+ if ( removeOnUnmount === true ) {
1126
1110
script . remove ( ) ;
1127
1111
}
1128
1112
} ;
1129
- } , [ src , options . removeOnUnmount ] ) ;
1113
+ } , [ src ] ) ;
1130
1114
1131
1115
return status ;
1132
1116
}
0 commit comments