Resources
1Install
npx skillscat add busirocket/agents-skills/busirocket-react Install via the SkillsCat registry.
About this skill
The skill enforces React component and hook structure rules and integrates Zustand state management, requiring one component per file, one exported hook per file, and moving helpers and types to dedicated folders. It solves inconsistent component organization and prop drilling, and is used when writing or refactoring React components, extracting hooks, or managing shared UI state.
SKILL.md
React (Components, Hooks, State)
Reusable patterns for scalable React codebases, including Zustand state
management.
When to Use
Use this skill when:
- Writing or refactoring
.tsxcomponents - Extracting hooks into
hooks/<area>/useXxx.ts - Removing helpers from components/hooks into
utils/ - Removing inline types into
types/ - Implementing global UI state (modals, progress indicators)
- Managing shared data across components or avoiding prop drilling
- Setting up cross-component communication with Zustand
Non-Negotiables (MUST)
Components and Hooks
- Exactly one exported component per
.tsxfile. - Exactly one exported hook per hook file (
hooks/<area>/useXxx.ts). - No helper functions inside components or hooks; extract helpers to
utils/. - No inline types inside components or hooks; import from
types/. - Prefer server-side rendering boundaries wisely (avoid
'use client'for large
subtrees).
State (Zustand)
- One store per domain (e.g.,
uiStore,workspaceStore,statusLogStore). - Keep stores focused; split when they grow too large.
- Use selectors to minimize re-renders:
useStore((state) => state.specificValue). - Actions should be defined in the store, not in components.
- Modals should read their visibility state from stores, not receive as props.
Rules
Component Patterns
react-one-component-per-file- One component per file (STRICT)react-client-vs-server- Client vs Server Components (App Router)react-folder-namespacing- Folder namespacing for complex componentsreact-performance- Performance optimization (memo, useCallback)react-accessibility- Accessibility best practicesreact-component-testing- Component tests in__tests__, React Testing
Library
Hooks Best Practices
react-one-hook-per-file- One hook per file (STRICT)react-no-helpers-in-hooks- No helpers inside hooks (STRICT)react-no-types-in-hooks- No types inside hooks (STRICT)react-stable-api- Stable API for hooksreact-side-effects- Side effects in hooks
State (Zustand)
zustand-when-to-use- When to use Zustand (modals, global UI state, shared
data)zustand-store-organization- Store organization (one store per domain,
selectors, actions)zustand-modal-pattern- Modal pattern with Zustand (read visibility from
store)zustand-avoiding-prop-drilling- Use Zustand stores instead of prop drilling
Related Skills
busirocket-core-conventions- General file structure and boundariesbusirocket-typescript-standards- TypeScript and type conventionsbusirocket-nextjs- Server vs Client Components (detailed)
How to Use
Read individual rule files for detailed explanations and code examples:
rules/react-one-component-per-file.md
rules/react-one-hook-per-file.md
rules/react-client-vs-server.md
rules/zustand-store-organization.md
rules/zustand-modal-pattern.mdEach rule file contains:
- Brief explanation of why it matters
- Code examples (correct and incorrect patterns)
- Additional context and best practices