fix: 修复审批列表选项卡切换时使用旧状态值的问题
- 修复 loadData 函数,添加 tab 参数直接传递当前选中的标签 - 修复文件中的重复代码问题 - 添加更详细的调试日志 问题原因:setActiveTab 是异步的,handleTabChange 中调用 loadData 时, activeTab 还是旧值,导致请求参数错误。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -52,40 +52,25 @@ export default function ApprovalList() {
|
|||||||
const [hasMore, setHasMore] = useState(true)
|
const [hasMore, setHasMore] = useState(true)
|
||||||
const [page, setPage] = useState(1)
|
const [page, setPage] = useState(1)
|
||||||
|
|
||||||
// 加载数据
|
// 加载数据 - 接收 tab 参数避免使用旧的 activeTab
|
||||||
const loadData = async (pageNum: number = 1, isRefresh: boolean = false) => {
|
const loadData = async (pageNum: number = 1, isRefresh: boolean = false, tab?: string) => {
|
||||||
if (loading) return
|
if (loading) return
|
||||||
|
|
||||||
console.log('🔍 Loading approval list:', { activeTab, pageNum, isRefresh })
|
// 使用传入的 tab 参数,如果没有则使用当前 activeTab
|
||||||
|
const currentTab = tab || activeTab
|
||||||
|
console.log('🔍 Loading approval list:', { currentTab, activeTab, tab, pageNum, isRefresh })
|
||||||
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
try {
|
try {
|
||||||
const result = await approvalApi.getList({
|
const result = await approvalApi.getList({
|
||||||
type: activeTab,
|
type: currentTab,
|
||||||
page: pageNum,
|
page: pageNum,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('📦 API response:', { type: activeTab, result })
|
console.log('📦 API response:', { type: currentTab, count: result?.list?.length, result })
|
||||||
|
|
||||||
const newList = result.list || []
|
const newList = result?.list || []
|
||||||
|
|
||||||
if (isRefresh || pageNum === 1) {
|
|
||||||
setList(newList)
|
|
||||||
} else {
|
|
||||||
setList([...list, ...newList])
|
|
||||||
}
|
|
||||||
|
|
||||||
setHasMore(newList.length >= 20)
|
|
||||||
setPage(pageNum)
|
|
||||||
} catch (error: any) {
|
|
||||||
console.error('Failed to load approvals:', error)
|
|
||||||
} finally {
|
|
||||||
setLoading(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const newList = result.list || []
|
|
||||||
|
|
||||||
if (isRefresh || pageNum === 1) {
|
if (isRefresh || pageNum === 1) {
|
||||||
setList(newList)
|
setList(newList)
|
||||||
@@ -104,11 +89,13 @@ export default function ApprovalList() {
|
|||||||
|
|
||||||
// 切换标签
|
// 切换标签
|
||||||
const handleTabChange = (key: string) => {
|
const handleTabChange = (key: string) => {
|
||||||
|
console.log('🔄 Tab changing from', activeTab, 'to', key)
|
||||||
setActiveTab(key as 'my' | 'pending' | 'approved')
|
setActiveTab(key as 'my' | 'pending' | 'approved')
|
||||||
setList([])
|
setList([])
|
||||||
setHasMore(true)
|
setHasMore(true)
|
||||||
setPage(1)
|
setPage(1)
|
||||||
loadData(1, true)
|
// 直接传入新的 tab 值,避免使用旧的 activeTab
|
||||||
|
loadData(1, true, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刷新
|
// 刷新
|
||||||
|
|||||||
Reference in New Issue
Block a user