fix: masonry re-render loop

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2024-10-21 14:14:05 +08:00
parent 4fbe873a82
commit 524a455294
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
1 changed files with 10 additions and 5 deletions

View File

@ -1,7 +1,8 @@
// @copy internal masonic hooks
import { clearRequestTimeout, requestTimeout } from "@essentials/request-timeout"
import { useWindowSize } from "@react-hook/window-size"
import { useForceUpdate } from "framer-motion"
import { throttle } from "lodash-es"
import { isEqual, throttle } from "lodash-es"
import type { ContainerPosition, MasonryProps, MasonryScrollerProps, Positioner } from "masonic"
import { createResizeObserver, useMasonry, usePositioner, useScrollToIndex } from "masonic"
import * as React from "react"
@ -188,10 +189,14 @@ function useContainerPosition(
React.useEffect(() => {
const resizeObserver = new ResizeObserver(() => {
setContainerPosition((prev) => ({
...prev,
width: elementRef.current?.offsetWidth || 0,
}))
setContainerPosition((prev) => {
const next = {
...prev,
width: elementRef.current?.offsetWidth || 0,
}
if (isEqual(next, prev)) return prev
return next
})
})
resizeObserver.observe(elementRef.current as HTMLElement)
return () => {