Loading...
Loading...
React performance optimization patterns using memoization, code splitting, and efficient rendering strategies. Use when optimizing slow React applications, reducing bundle size, or improving user experience with large datasets.
npx skill4agent add nickcrew/claude-ctx-plugin react-performance-optimization| Topic | Reference File |
|---|---|
| React.memo, useMemo, useCallback patterns | |
| Code splitting with lazy/Suspense, bundle optimization | |
| Virtualization for large lists (react-window) | |
| State management strategies, context splitting | |
| useTransition, useDeferredValue (React 18+) | |
| React DevTools Profiler, performance monitoring | |
| Common pitfalls and anti-patterns | |
# Open React DevTools Profiler
# Record interaction → Analyze flame graph → Find slow componentsReact.memouseCallbackuseMemoReact.lazy# Record new Profiler session
# Compare before/after metrics
# Ensure optimization actually helpedimport { memo } from 'react';
const ExpensiveList = memo(({ items, onItemClick }) => {
return items.map(item => (
<Item key={item.id} data={item} onClick={onItemClick} />
));
});import { useMemo } from 'react';
function DataTable({ items, filters }) {
const filteredItems = useMemo(() => {
return items.filter(item => filters.includes(item.category));
}, [items, filters]);
return <Table data={filteredItems} />;
}import { useCallback } from 'react';
function Parent() {
const handleClick = useCallback((id) => {
console.log('Clicked:', id);
}, []);
return <MemoizedChild onClick={handleClick} />;
}import { lazy, Suspense } from 'react';
const Dashboard = lazy(() => import('./Dashboard'));
const Reports = lazy(() => import('./Reports'));
function App() {
return (
<Suspense fallback={<Loading />}>
<Routes>
<Route path="/" element={<Dashboard />} />
<Route path="/reports" element={<Reports />} />
</Routes>
</Suspense>
);
}import { FixedSizeList } from 'react-window';
function VirtualList({ items }) {
return (
<FixedSizeList
height={600}
itemCount={items.length}
itemSize={80}
width="100%"
>
{({ index, style }) => (
<div style={style}>{items[index].name}</div>
)}
</FixedSizeList>
);
}config={{ theme: 'dark' }}