refactor(components): 重构 Playground组件中的数据展示逻辑

-移除了 useEffect 钩用,改用函数式组件的按需渲染
- 优化了 Header组件的点击事件处理,提高代码复用性
- 统一了数据加载和展示的逻辑,提升组件可维护性
This commit is contained in:
zhaoweijie 2025-08-23 20:22:01 +08:00
parent e0e41d7e21
commit 50af75d347
3 changed files with 22 additions and 18 deletions

View File

@ -1,4 +1,4 @@
import React, { useEffect, useMemo } from "react" import React, { useMemo } from "react"
import { DataNavigation } from "@/components/Common/DataNavigation.tsx" import { DataNavigation } from "@/components/Common/DataNavigation.tsx"
import { Card, Skeleton } from "antd" import { Card, Skeleton } from "antd"
import { useMessageOption } from "@/hooks/useMessageOption.tsx" import { useMessageOption } from "@/hooks/useMessageOption.tsx"
@ -136,7 +136,8 @@ export const PlaygroundData: React.FC<Props> = ({className}) => {
return messages.length > 0 ? "推荐数据" : "热点数据" return messages.length > 0 ? "推荐数据" : "热点数据"
}, [messages]) }, [messages])
useEffect(() => { const showMore = () => {
setShowPlayground(false)
setDetailHeader( setDetailHeader(
<Header <Header
title={title} title={title}
@ -145,15 +146,13 @@ export const PlaygroundData: React.FC<Props> = ({className}) => {
/> />
) )
setDetailMain(<Main loading={iodLoading} data={data} truncate={false} />) setDetailMain(<Main loading={iodLoading} data={data} truncate={false} />)
}, [title, iodLoading, data]) }
return ( return (
<Card <Card className={`${className}`} hoverable>
className={`${className}`}
hoverable>
<div className="h-full flex flex-col gap-2 relative"> <div className="h-full flex flex-col gap-2 relative">
{/* 数据导航 */} {/* 数据导航 */}
<Header title={title} onClick={() => setShowPlayground(false)} /> <Header title={title} onClick={showMore} />
{/* 数据列表 */} {/* 数据列表 */}
<Main loading={iodLoading} data={data.slice(0, 3)} /> <Main loading={iodLoading} data={data.slice(0, 3)} />
</div> </div>

View File

@ -128,12 +128,17 @@ export const PlaygroundScene: React.FC<Props> = ({ className }) => {
return messages.length > 0 ? "推荐场景" : "热点场景" return messages.length > 0 ? "推荐场景" : "热点场景"
}, [messages]) }, [messages])
useEffect(() => { const showMore = () => {
setShowPlayground(false)
setDetailHeader( setDetailHeader(
<Header title={title} showButton={false} onClick={() => setShowPlayground(false)} /> <Header
title={title}
showButton={false}
onClick={() => setShowPlayground(false)}
/>
) )
setDetailMain(<Main loading={iodLoading} data={data} truncate={false} />) setDetailMain(<Main loading={iodLoading} data={data} truncate={false} />)
}, [title, iodLoading, data]) }
return ( return (
<Card <Card
@ -141,7 +146,7 @@ export const PlaygroundScene: React.FC<Props> = ({ className }) => {
hoverable> hoverable>
<div className="h-full flex flex-col gap-2 relative"> <div className="h-full flex flex-col gap-2 relative">
{/* 数据导航 */} {/* 数据导航 */}
<Header title={title} onClick={() => setShowPlayground(false)} /> <Header title={title} onClick={showMore} />
{/* 数据列表 */} {/* 数据列表 */}
<Main loading={iodLoading} data={data.slice(0, 3)} /> <Main loading={iodLoading} data={data.slice(0, 3)} />

View File

@ -138,7 +138,8 @@ export const PlaygroundTeam: React.FC<Props> = ({ className }) => {
return messages.length > 0 ? "推荐团队" : "热点团队" return messages.length > 0 ? "推荐团队" : "热点团队"
}, [messages]) }, [messages])
useEffect(() => { const showMore = () => {
setShowPlayground(false)
setDetailHeader( setDetailHeader(
<Header <Header
title={title} title={title}
@ -146,16 +147,15 @@ export const PlaygroundTeam: React.FC<Props> = ({ className }) => {
onClick={() => setShowPlayground(false)} onClick={() => setShowPlayground(false)}
/> />
) )
setDetailMain( setDetailMain(<Main loading={iodLoading} data={data} truncate={false} flat={false} />)
<Main loading={iodLoading} data={data} truncate={false} flat={false} /> }
)
}, [title, iodLoading, data])
return ( return (
<Card className={`${className}`} hoverable> <Card className={`${className}`} hoverable>
<div className="h-full flex flex-col gap-2 relative"> <div className="h-full flex flex-col gap-2 relative">
{/* 数据导航 */} {/* 数据导航 */}
<Header title={title} onClick={() => setShowPlayground(false)} /> <Header title={title} onClick={showMore} />
{/* 数据列表 */} {/* 数据列表 */}
<Main loading={iodLoading} data={data.slice(0, 3)} /> <Main loading={iodLoading} data={data.slice(0, 3)} />
</div> </div>