diff --git a/.changeset/techdocs-dull-glasses-decide.md b/.changeset/techdocs-dull-glasses-decide.md new file mode 100644 index 0000000000..f043c2f607 --- /dev/null +++ b/.changeset/techdocs-dull-glasses-decide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Only replace the shadow dom if the content is changed to avoid a flickering UI. diff --git a/plugins/techdocs/src/reader/components/Reader.tsx b/plugins/techdocs/src/reader/components/Reader.tsx index 0cb6c039d0..7307961772 100644 --- a/plugins/techdocs/src/reader/components/Reader.tsx +++ b/plugins/techdocs/src/reader/components/Reader.tsx @@ -397,6 +397,11 @@ const TheReader = ({ const dom = useTechDocsReaderDom(); const shadowDomRef = useRef(null); + const onReadyRef = useRef<() => void>(onReady); + useEffect(() => { + onReadyRef.current = onReady; + }, [onReady]); + useEffect(() => { if (!dom || !shadowDomRef.current) return; const shadowDiv = shadowDomRef.current; @@ -406,8 +411,10 @@ const TheReader = ({ shadowRoot.removeChild(child), ); shadowRoot.appendChild(dom); - onReady(); - }, [dom, onReady]); + onReadyRef.current(); + + // this hook must ONLY be triggered by a changed dom + }, [dom]); return ( <>