diff --git a/app/searchWorksResults.tsx b/app/searchWorksResults.tsx index 5d3cb78..7a4cef3 100644 --- a/app/searchWorksResults.tsx +++ b/app/searchWorksResults.tsx @@ -49,6 +49,8 @@ function groupWorksByDate(works: WorkItem[]): Record { } export default function SearchWorksResultsScreen() { + console.log('========== SearchWorksResultsScreen 组件渲染 ==========') + const { t } = useTranslation() const router = useRouter() const params = useLocalSearchParams() @@ -57,6 +59,8 @@ export default function SearchWorksResultsScreen() { const [allWorks, setAllWorks] = useState([]) const [isLoadingMore, setIsLoadingMore] = useState(false) + console.log('========== 当前状态:', { searchText, page, allWorksLength: allWorks.length, isLoadingMore }) + const categories: Category[] = [ t('worksList.all') as Category, t('worksList.pets') as Category, @@ -76,29 +80,60 @@ export default function SearchWorksResultsScreen() { // 当搜索关键词或分类变化时,重置页码和累积数据 useEffect(() => { + console.log('[SearchResults] 重置: searchText=', searchText, 'category=', selectedCategory) setPage(1) setAllWorks([]) }, [searchText, selectedCategory]) // 累积新数据 useEffect(() => { - if (works && works.length > 0) { - if (page === 1) { - setAllWorks(works) - } else { - setAllWorks((prev) => [...prev, ...works]) + console.log('[SearchResults] works变化:', { + worksLength: works?.length, + page, + allWorksLength: allWorks.length, + isLoading, + data: data ? { total: data.total, totalPages: data.totalPages } : null + }) + + if (works) { + if (works.length > 0) { + if (page === 1) { + console.log('[SearchResults] 设置第1页数据') + setAllWorks(works) + } else { + console.log('[SearchResults] 追加第', page, '页数据') + setAllWorks((prev) => [...prev, ...works]) + } + } else if (page === 1) { + console.log('[SearchResults] 第1页无结果,清空数据') + setAllWorks([]) } setIsLoadingMore(false) } - }, [works, page]) + }, [works]) // 加载更多函数 const handleLoadMore = () => { - if (isLoading || isLoadingMore || !data) return + console.log('[SearchResults] handleLoadMore调用:', { + isLoading, + isLoadingMore, + hasData: !!data, + page, + totalPages: data?.totalPages + }) + + if (isLoading || isLoadingMore || !data) { + console.log('[SearchResults] 跳过加载: 正在加载或无数据') + return + } // 检查是否还有更多数据 - if (page >= data.totalPages) return + if (page >= data.totalPages) { + console.log('[SearchResults] 跳过加载: 已到最后一页') + return + } + console.log('[SearchResults] 开始加载第', page + 1, '页') setIsLoadingMore(true) setPage((prev) => prev + 1) } diff --git a/app/testLog.tsx b/app/testLog.tsx new file mode 100644 index 0000000..f48bad8 --- /dev/null +++ b/app/testLog.tsx @@ -0,0 +1,14 @@ +import React from 'react' +import { View, Text } from 'react-native' + +export default function TestLogScreen() { + console.log('========== TEST LOG SCREEN 渲染了 ==========') + console.log('如果你能看到这条日志,说明console.log正常工作') + + return ( + + 测试日志页面 + 请查看控制台是否有日志输出 + + ) +} diff --git a/hooks/use-works-search.ts b/hooks/use-works-search.ts index 68c2ce4..90bda48 100644 --- a/hooks/use-works-search.ts +++ b/hooks/use-works-search.ts @@ -68,50 +68,83 @@ export function useWorksSearch(params: UseWorksSearchParams) { const { keyword, category, page = 1, limit = 20 } = params - const execute = useCallback(async () => { - // Only execute query when keyword has content - const trimmedKeyword = keyword?.trim() || '' - if (!trimmedKeyword) { - setData(undefined) - setError(null) - return { data: undefined, error: null } - } - - setLoading(true) - setError(null) - - // Build API params - only include category if it's not "全部" - const apiParams = { - keyword: trimmedKeyword, - ...(category && category !== '全部' && { category }), - page, - limit, - } - - const templateGeneration = root.get(TemplateGenerationController) - const { data: result, error: err } = await handleError(async () => - await templateGeneration.list(apiParams) - ) - - if (err) { - setError(err) - setLoading(false) - return { data: undefined, error: err } - } - - setData(result as WorksSearchResponse) - setLoading(false) - return { data: result as WorksSearchResponse, error: null } - }, [keyword, category, page, limit]) - // Auto-execute search when params change useEffect(() => { + const execute = async () => { + // Only execute query when keyword has content + const trimmedKeyword = keyword?.trim() || '' + if (!trimmedKeyword) { + setData(undefined) + setError(null) + return + } + + setLoading(true) + setError(null) + + // Build API params - only include category if it's not "全部" + const apiParams = { + keyword: trimmedKeyword, + ...(category && category !== '全部' && { category }), + page, + limit, + } + + const templateGeneration = root.get(TemplateGenerationController) + const { data: result, error: err } = await handleError(async () => + await templateGeneration.list(apiParams) + ) + + if (err) { + setError(err) + setLoading(false) + return + } + + setData(result as WorksSearchResponse) + setLoading(false) + } + execute() - }, [execute]) + }, [keyword, category, page, limit]) const refetch = useCallback(() => { + const execute = async () => { + const trimmedKeyword = keyword?.trim() || '' + if (!trimmedKeyword) { + setData(undefined) + setError(null) + return { data: undefined, error: null } + } + + setLoading(true) + setError(null) + + const apiParams = { + keyword: trimmedKeyword, + ...(category && category !== '全部' && { category }), + page, + limit, + } + + const templateGeneration = root.get(TemplateGenerationController) + const { data: result, error: err } = await handleError(async () => + await templateGeneration.list(apiParams) + ) + + if (err) { + setError(err) + setLoading(false) + return { data: undefined, error: err } + } + + setData(result as WorksSearchResponse) + setLoading(false) + return { data: result as WorksSearchResponse, error: null } + } + return execute() - }, [execute]) + }, [keyword, category, page, limit]) return { data,