浏览代码

fix: Enhance error handling and retry logic in Apps component (#17733)

tags/1.3.0
GuanMu 6 个月前
父节点
当前提交
6df0215246
没有帐户链接到提交者的电子邮件
共有 1 个文件被更改,包括 16 次插入4 次删除
  1. 16
    4
      web/app/(commonLayout)/apps/Apps.tsx

+ 16
- 4
web/app/(commonLayout)/apps/Apps.tsx 查看文件

setQuery(prev => ({ ...prev, tagIDs })) setQuery(prev => ({ ...prev, tagIDs }))
}, [setQuery]) }, [setQuery])


const { data, isLoading, setSize, mutate } = useSWRInfinite(
const { data, isLoading, error, setSize, mutate } = useSWRInfinite(
(pageIndex: number, previousPageData: AppListResponse) => getKey(pageIndex, previousPageData, activeTab, isCreatedByMe, tagIDs, searchKeywords), (pageIndex: number, previousPageData: AppListResponse) => getKey(pageIndex, previousPageData, activeTab, isCreatedByMe, tagIDs, searchKeywords),
fetchAppList, fetchAppList,
{ revalidateFirstPage: true },
{
revalidateFirstPage: true,
shouldRetryOnError: false,
dedupingInterval: 500,
errorRetryCount: 3,
},
) )


const anchorRef = useRef<HTMLDivElement>(null) const anchorRef = useRef<HTMLDivElement>(null)
useEffect(() => { useEffect(() => {
const hasMore = data?.at(-1)?.has_more ?? true const hasMore = data?.at(-1)?.has_more ?? true
let observer: IntersectionObserver | undefined let observer: IntersectionObserver | undefined

if (error) {
if (observer)
observer.disconnect()
return
}

if (anchorRef.current) { if (anchorRef.current) {
observer = new IntersectionObserver((entries) => { observer = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting && !isLoading && hasMore)
if (entries[0].isIntersecting && !isLoading && !error && hasMore)
setSize((size: number) => size + 1) setSize((size: number) => size + 1)
}, { rootMargin: '100px' }) }, { rootMargin: '100px' })
observer.observe(anchorRef.current) observer.observe(anchorRef.current)
} }
return () => observer?.disconnect() return () => observer?.disconnect()
}, [isLoading, setSize, anchorRef, mutate, data])
}, [isLoading, setSize, anchorRef, mutate, data, error])


const { run: handleSearch } = useDebounceFn(() => { const { run: handleSearch } = useDebounceFn(() => {
setSearchKeywords(keywords) setSearchKeywords(keywords)

正在加载...
取消
保存