fix: guard hazard list state

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
jesxion
2026-04-24 18:42:17 +08:00
parent d67b935882
commit 74f367ef90

View File

@@ -1,4 +1,4 @@
import { useCallback, useEffect, useState } from 'react'
import { useCallback, useEffect, useRef, useState } from 'react'
import { Button, Card, List, NavBar, Skeleton, Tabs, Tag, Toast } from 'antd-mobile'
import { useNavigate } from 'react-router-dom'
import AppTabBar from '../layout/AppTabBar'
@@ -23,20 +23,28 @@ function tagColor(tone: 'warning' | 'info' | 'success'): 'warning' | 'primary' |
export default function HazardListPage() {
const navigate = useNavigate()
const mountedRef = useRef(true)
const [activeKey, setActiveKey] = useState<FilterKey>('all')
const [items, setItems] = useState<HazardItem[]>([])
const [total, setTotal] = useState(0)
const [loading, setLoading] = useState(true)
useEffect(() => () => {
mountedRef.current = false
}, [])
const load = useCallback(async (filter: FilterKey) => {
setLoading(true)
try {
const res = await listHazards(filter === 'all' ? {} : { status: filter })
if (!mountedRef.current) return
setItems(Array.isArray(res.data.items) ? res.data.items : [])
setTotal(res.data.total)
} catch (err) {
if (!mountedRef.current) return
Toast.show(err instanceof Error ? err.message : '加载失败')
} finally {
if (!mountedRef.current) return
setLoading(false)
}
}, [])