Fix attachment double render

This commit is contained in:
2025-10-16 01:31:27 +02:00
parent 3483609f19
commit 82c83c4554

View File

@@ -60,7 +60,8 @@ namespace MusicXmlAttachment {
function MusicXmlAttachment({ data, mediaType }: MusicXmlAttachment.Props) { function MusicXmlAttachment({ data, mediaType }: MusicXmlAttachment.Props) {
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
const renderFn = useRef<null | (() => void)>(null);
const [renderFn, setRenderFn] = useState<null | (() => void)>(null);
const load = useCallback(async () => { const load = useCallback(async () => {
@@ -115,24 +116,24 @@ function MusicXmlAttachment({ data, mediaType }: MusicXmlAttachment.Props) {
renderSingleHorizontalStaffline: true, renderSingleHorizontalStaffline: true,
}); });
const render = () => osmd.render();
await osmd.load(musicXml); await osmd.load(musicXml);
render(); setRenderFn(() => osmd.render());
}, [data, mediaType]);
renderFn.current = render;
}, [data]);
useEffect(() => void load(), [load]); useEffect(() => void load(), [load]);
useEffect(() => { useLayoutEffect(() => {
const render = () => renderFn.current?.(); renderFn?.();
}, [renderFn]);
window.addEventListener("resize", render); useEffect(() => {
if (renderFn === null) return;
window.addEventListener("resize", renderFn);
return () => { return () => {
window.removeEventListener("resize", render); window.removeEventListener("resize", renderFn);
}; };
}, []); }, [renderFn]);
return <div ref={containerRef} className="w-full h-full overflow-scroll" />; return <div ref={containerRef} className="w-full h-full overflow-scroll" />;
} }