用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/kwkraus/my-dashboard --skill optimize-react-component命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | optimize-react-component |
| description | Optimize React components for performance following Next.js 15 and project best practices |
When optimizing React components in this Next.js 15 dashboard:
Choose the right component type:
Minimize client-side JavaScript:
// Good: Server Component (default)
export default function StaticContent() {
return <div>Content</div>;
}
// Use client only when necessary
"use client";
export default function InteractiveContent() {
const [state, setState] = useState(false);
return <div onClick={() => setState(!state)}>Content</div>;
}
Optimize re-renders with React.memo and useMemo:
import { memo, useMemo } from "react";
// Memoize expensive computations
const ExpensiveComponent = memo(function ExpensiveComponent({ data }) {
const processedData = useMemo(() => {
return data.map(item => expensiveOperation(item));
}, [data]);
return <div>{processedData}</div>;
});
Use dynamic imports for large components:
import dynamic from "next/dynamic";
const HeavyChart = dynamic(() => import("@/components/HeavyChart"), {
loading: () => <p>Loading chart...</p>,
ssr: false // Disable SSR if component uses browser APIs
});
Optimize images with next/image:
import Image from "next/image";
<Image
src="/image.png"
alt="Description"
width={500}
height={300}
priority // For above-the-fold images
/>
Prevent unnecessary effect executions:
// Include all dependencies
useEffect(() => {
fetchData(id);
}, [id]); // Specify dependencies
// Cleanup side effects
useEffect(() => {
const subscription = subscribe();
return () => subscription.unsubscribe();
}, []);
Type safety for better performance:
any typeComponent splitting:
Leverage Turbopack (Next.js 15):
npm run dev which automatically uses Turbopack// Before (unnecessarily client-side)
"use client";
export default function StaticCard() {
return <Card>Static Content</Card>;
}
// After (server component)
export default function StaticCard() {
return <Card>Static Content</Card>;
}
"use client";
import { memo, useMemo } from "react";
import { LineChart, Line } from "recharts";
export const OptimizedChart = memo(function OptimizedChart({ data }) {
const colors = useChartColors();
// Memoize processed data
const chartData = useMemo(() => {
return data.map(item => ({
name: item.label,
value: item.total
}));
}, [data]);
return (
<LineChart data={chartData}>
<Line dataKey="value" stroke={colors.chart1} />
</LineChart>
);
});
// Before: One large component
export default function Dashboard() {
return (
<div>
<Header />
<Stats />
<Charts />
<Footer />
</div>
);
}
// After: Split into smaller, focused components
export default function Dashboard() {
return (
<div>
<DashboardHeader />
<DashboardStats />
<DashboardCharts />
<DashboardFooter />
</div>
);
}
// Each component in its own file
// Easier to maintain, optimize, and test
next.config.tstsconfig.jsonsrc/components/DashboardCharts.tsxcreate-dashboard-pageadd-chart