diff --git a/packages/web/src/components/dashboard/top-users-list.tsx b/packages/web/src/components/dashboard/top-users-list.tsx index 79f84ee7..86978e6f 100644 --- a/packages/web/src/components/dashboard/top-users-list.tsx +++ b/packages/web/src/components/dashboard/top-users-list.tsx @@ -1,31 +1,34 @@ -'use client' +"use client"; -import { formatTokens, formatCost } from '@/lib/format' -import type { UserStat } from '@argos/shared' +import { useMemo } from "react"; +import { formatTokens, formatCost } from "@/lib/format"; +import type { UserStat } from "@argos/shared"; interface TopUsersListProps { - users: UserStat[] + users: UserStat[]; } export function TopUsersList({ users }: TopUsersListProps) { + // Use useMemo for expensive synchronous data derivations over lists to avoid recalculation on re-renders + const maxTokens = useMemo( + () => + users.reduce((m, u) => Math.max(m, u.inputTokens + u.outputTokens), 0), + [users], + ); + if (users.length === 0) { return (
최근 7일간 활동한 사용자가 없습니다
- ) + ); } - const maxTokens = users.reduce( - (m, u) => Math.max(m, u.inputTokens + u.outputTokens), - 0, - ) - return (