Files
wzdj/hooks/use-streamers.ts

56 lines
1.4 KiB
TypeScript

"use client"
import { useState, useEffect, useCallback } from "react"
import { getStreamersForApp, getStreamerById, type AppStreamer } from "@/lib/api/streamers"
export function useStreamers() {
const [list, setList] = useState<AppStreamer[]>([])
const [loading, setLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
const load = useCallback(async () => {
setLoading(true)
setError(null)
try {
const data = await getStreamersForApp()
setList(data)
} catch (e) {
setError(e instanceof Error ? e.message : "加载失败")
setList([])
} finally {
setLoading(false)
}
}, [])
useEffect(() => {
load()
}, [load])
return { streamers: list, loading, error, reload: load }
}
export function useStreamer(id: string | null) {
const [streamer, setStreamer] = useState<AppStreamer | null>(null)
const [loading, setLoading] = useState(!!id)
const [error, setError] = useState<string | null>(null)
useEffect(() => {
if (!id) {
setStreamer(null)
setLoading(false)
return
}
setLoading(true)
setError(null)
getStreamerById(id)
.then(setStreamer)
.catch((e) => {
setError(e instanceof Error ? e.message : "加载失败")
setStreamer(null)
})
.finally(() => setLoading(false))
}, [id])
return { streamer, loading, error }
}