WHEN building React components/pages/apps; enforces scalable architecture, state management, API layer, performance patterns.
Production-grade React development with feature-based architecture, type-safe state management, and performance optimization.
| Topic | Guide |
|---|---|
| Directory layout and feature modules | project-structure.md |
| Component design patterns | component-patterns.md |
| Compound components (Card pattern) | compound-components.md |
| State categories and solutions | state-management.md |
| API client and request structure | api-layer.md |
| Code splitting and optimization | performance.md |
| useEffect guidance and alternatives | useeffect.md |
| Testing pyramid and strategy | testing-strategy.md |
| Project tooling standards | project-standards.md |
Use project-structure.md when you need:
Use component-patterns.md when you need:
Use compound-components.md when you need:
Use state-management.md when you need:
Use api-layer.md when you need:
Use performance.md when you need:
Use useeffect.md when you need:
Use testing-strategy.md when you need:
Use project-standards.md when you need:
Is it used by multiple features?
├── Yes → src/components/
└── No → Is it specific to one feature?
├── Yes → src/features/[feature]/components/
└── No → Colocate with the component that uses it
Is this data from an API?
├── Yes → React Query / SWR
└── No → Is it form data?
├── Yes → React Hook Form
└── No → Is it URL state (filters, pagination)?
├── Yes → React Router
└── No → Is it needed globally?
├── Yes → Zustand / Jotai / Context
└── No → useState / useReducer
Does this functionality have:
- Its own routes/pages?
- Its own API endpoints?
- Components not shared elsewhere?
├── Yes to 2+ → Create feature folder
└── Otherwise → Add to existing feature or shared
Why does this code need to run?
"Because the component was displayed"
├── Is it synchronizing with an external system?
│ ├── Yes → useEffect is appropriate
│ └── No → Probably don't need useEffect
│
"Because the user did something"
└── Put it in the event handler, not useEffect
"Because I need to compute a value"
└── Calculate during render (or useMemo if expensive)
See useeffect.md for detailed guidance.