From c4d382aadcdc299100b2444015bbf820503f25c8 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Fri, 14 Aug 2026 18:42:35 -0700 Subject: [PATCH] fix react doctor --- .../navigation/use-pending-reveal.ts | 6 ++-- .../worktree-list/viewport/use-virtualizer.ts | 34 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.ts b/src/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.ts index f3cd6a7ccae..cdeab24fc81 100644 --- a/src/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.ts +++ b/src/renderer/src/components/sidebar/worktree-list/navigation/use-pending-reveal.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef, useState } from 'react' +import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react' import { toast } from 'sonner' import { useAppStore } from '@/store' import { translate } from '@/i18n/i18n' @@ -26,7 +26,9 @@ export function usePendingSidebarReveal(args: PendingSidebarRevealArgs): void { const pendingRevealRetryRef = useRef<{ worktreeId: string; count: number } | null>(null) const pendingRowRevealRetryRef = useRef<{ rowKey: string; count: number } | null>(null) const argsRef = useRef(args) - argsRef.current = args + useLayoutEffect(() => { + argsRef.current = args + }) const { pendingRevealWorktree, diff --git a/src/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.ts b/src/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.ts index fd2ebf96541..221f2da0f94 100644 --- a/src/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.ts +++ b/src/renderer/src/components/sidebar/worktree-list/viewport/use-virtualizer.ts @@ -32,10 +32,6 @@ export function useWorktreeListVirtualizer(args: { suppressMeasurementAdjustmentUntilRef: React.MutableRefObject }) { const { renderRows, firstHeaderIndex, scrollRef, scrollOffsetRef } = args - const renderRowsRef = useRef(renderRows) - renderRowsRef.current = renderRows - const firstHeaderIndexRef = useRef(firstHeaderIndex) - firstHeaderIndexRef.current = firstHeaderIndex const stickyHeaderIndexes = useMemo(() => getStickyHeaderIndexes(renderRows), [renderRows]) const activeStickyHeaderIndexRef = useRef(null) const activeStickyHostIndexRef = useRef(null) @@ -51,11 +47,14 @@ export function useWorktreeListVirtualizer(args: { }, [renderRows] ) - const getExpectedVirtualRowKey = useCallback((element: Element) => { - const index = getVirtualRowIndex(element) - const row = index === null ? undefined : renderRowsRef.current[index] - return row ? getRenderRowKey(row) : null - }, []) + const getExpectedVirtualRowKey = useCallback( + (element: Element) => { + const index = getVirtualRowIndex(element) + const row = index === null ? undefined : renderRows[index] + return row ? getRenderRowKey(row) : null + }, + [renderRows] + ) const isCurrentVirtualRowElement = useCallback( (element: Element) => { const expectedKey = getExpectedVirtualRowKey(element) @@ -80,9 +79,9 @@ export function useWorktreeListVirtualizer(args: { return ( measured?.size ?? estimateRenderRowSize( - renderRowsRef.current, + renderRows, index ?? -1, - firstHeaderIndexRef.current, + firstHeaderIndex, activeStickyHeaderIndexRef.current ) ) @@ -90,19 +89,18 @@ export function useWorktreeListVirtualizer(args: { const index = getVirtualRowIndex(element) if ( index !== null && - (renderRowsRef.current[index]?.type === 'header' || - renderRowsRef.current[index]?.type === 'host-header') + (renderRows[index]?.type === 'header' || renderRows[index]?.type === 'host-header') ) { return estimateRenderRowSize( - renderRowsRef.current, + renderRows, index, - firstHeaderIndexRef.current, + firstHeaderIndex, activeStickyHeaderIndexRef.current ) } return measureVirtualElementSize(element, entry, instance) }, - [isCurrentVirtualRowElement] + [firstHeaderIndex, isCurrentVirtualRowElement, renderRows] ) const virtualizer = useVirtualizer({ @@ -123,10 +121,10 @@ export function useWorktreeListVirtualizer(args: { return extractWorktreeVirtualRowIndexes({ range, stickyHeaderIndexes, - rows: renderRowsRef.current + rows: renderRows }) }, - [stickyHeaderIndexes] + [renderRows, stickyHeaderIndexes] ), overscan: 10, gap: WORKTREE_SIDEBAR_VIRTUAL_ROW_GAP,