From harness-claude
Builds responsive UIs in React 18+ using concurrent features like startTransition and useDeferredValue. Useful for laggy inputs during expensive updates, large lists, and showing stale content while loading.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Build responsive UIs using React 18 concurrent features and transitions
Preserves React 18 concurrent patterns (useTransition, useDeferredValue, Suspense) during React 19 migration and guides adoption of new APIs (use, useOptimistic, Actions).
Optimizes React 19 apps via guidelines on concurrent rendering, Server Components, actions, hooks, memoization, and re-render reduction. Use when writing components or using concurrent features.
Guides implementation of modern React patterns: hooks, component composition, state management, performance optimizations, concurrent features. Use for building or refactoring components.
Share bugs, ideas, or general feedback.
Build responsive UIs using React 18 concurrent features and transitions
createRootstartTransition to mark non-urgent state updates:
const [isPending, startTransition] = useTransition();
startTransition(() => setQuery(input));
useDeferredValue to defer an expensive derived computation:
const deferredQuery = useDeferredValue(query);
const filteredList = useMemo(() => filter(list, deferredQuery), [list, deferredQuery]);
isPending as a subtle loading indicator (opacity, spinner overlay) — not a full Suspense fallback.createRoot (required for concurrent features).Concurrent React can interrupt, pause, and resume renders. startTransition and useDeferredValue are the primary APIs for leveraging this.
startTransition vs useDeferredValue:
startTransition: you control when the update is marked as non-urgent (around the setState call)useDeferredValue: you defer a derived value (useful when you cannot wrap the setter)What makes an update "concurrent": React can abandon an in-progress render if a higher-priority update arrives (e.g., user keypress). This only happens for transitions.
React 18 migration: Opt in by replacing ReactDOM.render with createRoot. Strict Mode in React 18 mounts components twice in development to surface side effects.
https://patterns.dev/react/concurrent-pattern