用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/mikailustuner/OmniRule --skill react-expert命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Bun runtime: HTTP server, file I/O, SQLite, test runner, package manager, bundler — all-in-one JS toolchain.
Clerk: Drop-in auth UI, Organizations, User management, JWT templates, webhooks, Next.js middleware integration.
Gelişmiş masaüstü, tarayıcı ve işletim sistemi kontrol yeteneği. Görsel (koordinat tabanlı) fare/klavye otomasyonu, DOM manipülasyonu, pencere yönetimi, gelişmiş dosya, ağ ve süreç yönetimini kapsar.
基于 SOC 职业分类
正在显示 SKILL.md
| name | react-expert |
| description | React 19: Hooks decision tree, State patterns, Component composition, Performance optimization strategy. |
| triggers | {"extensions":[".tsx",".jsx"],"directories":["components/","app/"],"keywords":["React","hooks","useState","useEffect","useCallback","Suspense","use()"]} |
| auto_load_when | Writing React components or hooks |
| agent | frontend-ops |
| tools | ["Read","Write","Bash"] |
Version: React 19.2 | Focus: Decision trees, patterns, performance
When to use use():
├── Promise in component → use(promise) pauses until resolved
├── Needs Suspense boundary → wraps in <Suspense>
├── Parallel data fetching → multiple use() in same component
│ └── React fetches all in parallel, streams in as ready
│
└── NOT for: client-side data, local state
Pattern:
// BAD - blocking render
const data = await fetchData() // blocks entire component
// GOOD - uses Suspense
const data = use(fetchData()) // streams in, shows fallback while loading
What type of state?
├── UI state (open/close, selected) → useState
│ └── Local component, simple transitions
│
├── Complex local state → useReducer
│ └── Multiple sub-values, complex transitions
│
├── Shared across components → Zustand/Context
│ └── Theme, auth, user preferences
│
└── Server data → React Query / TanStack Query
└── NOT useState - cache on server
When to use optimistic updates:
├── User action requires server round-trip
├── Want instant visual feedback
├── Can infer result from action
└── Should handle error case (rollback)
Flow:
1. User clicks
2. Update UI immediately (useOptimistic)
3. Send server request
4. On success: actual server data replaces optimistic
5. On error: optimistic reverts to original
When to use:
├── Any form with server submission
├── Need validation errors displayed
├── Need pending state for loading UI
└── Want progressive enhancement (works without JS)
Flow:
1. Server Action returns { errors?, message? }
2. useActionState captures return value
3. formAction triggers Server Action
4. isPending shows loading state
5. Form re-renders with result
When to compose vs flatten:
├── Flat works when:
│ └── Few components, simple relationships
│
└── Compose (children/header/footer slots) when:
└── Multiple page types share structure
└── Need different content in same wrapper
└── Parallel routes (@slot pattern)
└── Intercepting routes (modal wrapper)
Is re-render a problem?
├── YES - measure first with React DevTools Profiler
│
├── If slow - fix causes, not symptoms:
│ ├── Too many components → flatten tree
│ ├── Large data → virtualization
│ ├── Expensive computation → useMemo/useCallback
│ └── Wrong dependency arrays → useCallback for functions
│
└── NO - don't optimize
useMemo/useCallback rules:
When to use Suspense:
├── Data fetching in components
├── Code splitting (lazy)
├── Image loading
└── Any async resource
Granular vs Route-level:
├── Route-level (loading.tsx) → OK for simple pages
│ └── All content loads together
│
└── Component-level (<Suspense>) → PREFERRED
└── Different parts load independently
└── User sees content faster
└── Avoids "waterfall" loading
Should this be Server or Client Component?
Ask in order:
1. Does it need user interaction? → Client
2. Does it use browser APIs? → Client
3. Does it use hooks (useState, etc)? → Client
4. Does it fetch data for display? → Server
5. Does it render layout/structure? → Server
Hybrid pattern: Server Component fetches, passes data to Client Component that handles interaction.
❌ useEffect for derived state
✅ Compute derived state inline during render — no effect needed
❌ Mutating state directly (array.push, obj.key = val)
✅ Always return new references: [...arr, item], { ...obj, key: val }
❌ Large components that re-render on every parent change
✅ React.memo on stable components; split fast-changing state down
❌ useCallback/useMemo everywhere as "optimization"
✅ Profile first; memoize only when renders measurably slow
❌ key={index} for dynamic lists
✅ key={item.id} — stable, unique identity prevents wrong reconciliation
| Hook | Use case | Note |
|---|---|---|
| useState | Local UI state | Simple values |
| useReducer | Complex state machine | Action-based |
| useContext | Cross-tree shared state | Don't overuse |
| useEffect | Side effects only | Not for derived state |
| useCallback | Stable function ref | Only when passed to memo'd child |
| useMemo | Expensive computation | Profile first |
| useRef | DOM ref / mutable | Doesn't trigger re-render |
| useTransition | Non-urgent updates | Mark slow state as transition |