Fix attachment double render
This commit is contained in:
@@ -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" />;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user