From 94ee7d4958c1e0d9224dbf78722f8ce74c4385fb Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 29 Dec 2024 17:23:29 +0100 Subject: [PATCH] Improve "page spread page state" updates Since "pagesToSpreadState" isn't part of the dependency array and also would decrease the render performance if it was (see reasoning of c79f7cc874d35bece298cb4429fa0fc7c6bc5681), the array reference might be out of date and thus, the guard might not work correctly --- .../reader/components/viewer/ReaderViewer.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/modules/reader/components/viewer/ReaderViewer.tsx b/src/modules/reader/components/viewer/ReaderViewer.tsx index da9b72e7..f8926c57 100644 --- a/src/modules/reader/components/viewer/ReaderViewer.tsx +++ b/src/modules/reader/components/viewer/ReaderViewer.tsx @@ -179,11 +179,17 @@ const BaseReaderViewer = forwardRef( const img = new Image(); img.onload = () => { const isSpreadPageFlag = isSpreadPage(img); - if (pagesToSpreadState[index] === isSpreadPageFlag) { + if (!isSpreadPageFlag || pagesToSpreadState[index] === isSpreadPageFlag) { return; } - setPagesToSpreadState((prevState) => prevState.toSpliced(index, 1, isSpreadPageFlag)); + setPagesToSpreadState((prevState) => { + if (pagesToSpreadState[index] === isSpreadPageFlag) { + return prevState; + } + + return prevState.toSpliced(index, 1, isSpreadPageFlag); + }); }; img.src = url; } @@ -200,6 +206,8 @@ const BaseReaderViewer = forwardRef( return statePageLoadStates.toSpliced(index, 1, { loaded: true }); }); }, + // do not add "pagesToSpreadState" and "pageLoadStates" as a dependency, otherwise, every page gets re-rendered + // when they change which impacts the performance massively (depending on the total page count) [actualPages, readingMode], );