From nickcrew-claude-ctx-plugin
Optimizes React apps using memoization (React.memo, useMemo, useCallback), code splitting, virtualization, and concurrent rendering. Use for slow components, bundle size reduction, large datasets, and re-render prevention.
npx claudepluginhub nickcrew/claude-cortexThis skill uses the workspace's default tool permissions.
Expert guidance for optimizing React application performance through memoization, code splitting, virtualization, and efficient rendering strategies.
Optimizes React performance using React.memo for component memoization, custom prop comparisons, and useMemo for expensive computations like filtering and sorting. Use for preventing unnecessary re-renders.
Diagnoses slow React components using React DevTools Profiler and suggests fixes like isolating ticking state, memoizing callbacks, stabilizing props, and virtualizing lists.
Optimizes React app performance covering React Compiler mastery, bundle optimization, rendering efficiency, data fetching, Core Web Vitals, state subscriptions, profiling, and memory management. Use for bundle analysis, render bottlenecks, or Core Web Vitals improvement.
Share bugs, ideas, or general feedback.
Expert guidance for optimizing React application performance through memoization, code splitting, virtualization, and efficient rendering strategies.
React re-renders components when props or state change. Unnecessary re-renders waste CPU cycles and degrade user experience. Key optimization techniques:
Load detailed patterns and examples as needed:
| Topic | Reference File |
|---|---|
| React.memo, useMemo, useCallback patterns | skills/react-performance-optimization/references/memoization.md |
| Code splitting with lazy/Suspense, bundle optimization | skills/react-performance-optimization/references/code-splitting.md |
| Virtualization for large lists (react-window) | skills/react-performance-optimization/references/virtualization.md |
| State management strategies, context splitting | skills/react-performance-optimization/references/state-management.md |
| useTransition, useDeferredValue (React 18+) | skills/react-performance-optimization/references/concurrent-features.md |
| React DevTools Profiler, performance monitoring | skills/react-performance-optimization/references/profiling-debugging.md |
| Common pitfalls and anti-patterns | skills/react-performance-optimization/references/common-pitfalls.md |
# Open React DevTools Profiler
# Record interaction → Analyze flame graph → Find slow components
Look for:
For unnecessary re-renders:
React.memouseCallback for stable function referencesFor expensive computations:
useMemo to cache resultsFor large lists:
For slow initial load:
React.lazy# Record new Profiler session
# Compare before/after metrics
# Ensure optimization actually helped
import { 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' }})Before optimizing:
Optimization targets:
After optimizing: