This commit is contained in:
imeepos 2026-02-02 18:57:05 +08:00
parent 95dd556ded
commit f6f28a4cb4
3 changed files with 128 additions and 46 deletions

View File

@ -49,6 +49,8 @@ function groupWorksByDate(works: WorkItem[]): Record<string, WorkItem[]> {
}
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<WorksSearchResult[]>([])
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)
}

14
app/testLog.tsx Normal file
View File

@ -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 (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text></Text>
<Text></Text>
</View>
)
}

View File

@ -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,