@@ -72,26 +72,40 @@ const DynamicContentStyles = React.forwardRef<HTMLElement, DynamicContentStylesP
7272 const [ dataDynamicStyle , styles ] = getStyles ( disable , queryStyles , book , bookStylesUrl , archiveLoader ) ;
7373
7474 // Inject dynamic styles into a <style> tag
75- React . useEffect ( ( ) => {
76- if ( ! styles || typeof document === 'undefined' ) {
77- return ;
75+ React . useEffect ( ( ) => {
76+ if ( ! styles || typeof document === 'undefined' ) {
77+ return ;
78+ }
79+
80+ const globalKey = '__rexDynamicContentStyles__' ;
81+ const globalStore = globalThis as any ;
82+ const store = ( globalStore [ globalKey ] ||= {
83+ count : 0 ,
84+ element : null as HTMLStyleElement | null ,
85+ } ) ;
86+
87+ store . count += 1 ;
88+
89+ if ( ! store . element || ! document . head . contains ( store . element ) ) {
90+ store . element = document . createElement ( 'style' ) ;
91+ store . element . setAttribute ( 'data-dynamic-content-styles' , 'true' ) ;
92+ document . head . appendChild ( store . element ) ;
93+ }
94+
95+ store . element . textContent = `
96+ [data-dynamic-style="true"] {
97+ ${ styles }
7898 }
99+ ` ;
79100
80- // Create a <style> element with scoped styles
81- const styleElement = document . createElement ( 'style' ) ;
82- styleElement . setAttribute ( 'data-dynamic-content-styles' , 'true' ) ;
83- styleElement . textContent = `
84- [data-dynamic-style="true"] {
85- ${ styles }
86- }
87- ` ;
88- document . head . appendChild ( styleElement ) ;
89-
90- // Cleanup function to remove the style element when component unmounts or styles change
91- return ( ) => {
92- document ?. head . removeChild ( styleElement ) ; // no document returns early
93- } ;
94- } , [ styles ] ) ;
101+ return ( ) => {
102+ store . count -= 1 ;
103+ if ( store . count <= 0 && store . element ) {
104+ store . element . remove ( ) ;
105+ store . element = null ;
106+ }
107+ } ;
108+ } , [ styles ] ) ;
95109
96110 return < div data-dynamic-style = { dataDynamicStyle } { ...otherProps } ref = { ref } >
97111 { children }
0 commit comments