Skip to content

Commit 524a455

Browse files
committed
fix: masonry re-render loop
Signed-off-by: Innei <tukon479@gmail.com>
1 parent 4fbe873 commit 524a455

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

apps/renderer/src/components/ui/Masonry.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
// @copy internal masonic hooks
12
import { clearRequestTimeout, requestTimeout } from "@essentials/request-timeout"
23
import { useWindowSize } from "@react-hook/window-size"
34
import { useForceUpdate } from "framer-motion"
4-
import { throttle } from "lodash-es"
5+
import { isEqual, throttle } from "lodash-es"
56
import type { ContainerPosition, MasonryProps, MasonryScrollerProps, Positioner } from "masonic"
67
import { createResizeObserver, useMasonry, usePositioner, useScrollToIndex } from "masonic"
78
import * as React from "react"
@@ -188,10 +189,14 @@ function useContainerPosition(
188189

189190
React.useEffect(() => {
190191
const resizeObserver = new ResizeObserver(() => {
191-
setContainerPosition((prev) => ({
192-
...prev,
193-
width: elementRef.current?.offsetWidth || 0,
194-
}))
192+
setContainerPosition((prev) => {
193+
const next = {
194+
...prev,
195+
width: elementRef.current?.offsetWidth || 0,
196+
}
197+
if (isEqual(next, prev)) return prev
198+
return next
199+
})
195200
})
196201
resizeObserver.observe(elementRef.current as HTMLElement)
197202
return () => {

0 commit comments

Comments
 (0)