fix: guard hazard list state
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}, [])
|
||||
|
||||
Reference in New Issue
Block a user