Back to list
first-fluke

component-refactoring

by first-fluke

Production-ready fullstack monorepo template with Next.js, FastAPI, Flutter, Terraform, and mise

141🍴 21📅 Jan 23, 2026

SKILL.md


name: component-refactoring description: Refactor high-complexity React components. Use when complexity metrics are high or to split monolithic UI.

Component Refactoring Skill

Refactor high-complexity React components with proven patterns and workflows.

Complexity Threshold: Components with cyclomatic complexity > 50 or line count > 300 should be candidates for refactoring.

Use When:

  • pnpm analyze-component shows high complexity.
  • Users ask for "code splitting", "hook extraction", or "cleanup".
  • A component file exceeds 300 lines of code.

Core Refactoring Patterns

1. Extract Custom Hooks

Goal: Separate UI from State/Logic.

Before:

function UserList() {
  const [users, setUsers] = useState([]);
  const [loading, setLoading] = useState(false);

  useEffect(() => {
    setLoading(true);
    fetch('/api/users').then(data => {
      setUsers(data);
      setLoading(false);
    });
  }, []);

  if (loading) return <Spinner />;
  return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}

After:

// hooks/useUsers.ts
function useUsers() {
  return useQuery({ queryKey: ['users'], queryFn: fetchUsers });
}

// UserList.tsx
function UserList() {
  const { data: users, isLoading } = useUsers();
  if (isLoading) return <Spinner />;
  return <UserListView users={users} />;
}

2. Extract Sub-Components

Goal: Break down monolithic JSX.

Before:

function Dashboard() {
  return (
    <div>
      <header>...</header>
      <aside>...</aside>
      <main>
        <section className="stats">...</section>
        <section className="feed">...</section>
      </main>
    </div>
  );
}

After:

function Dashboard() {
  return (
    <Layout>
      <DashboardHeader />
      <DashboardSidebar />
      <DashboardContent>
        <StatsWidget />
        <ActivityFeed />
      </DashboardContent>
    </Layout>
  );
}

3. Simplify Conditional Logic

Goal: Reduce nesting and if/else checks implementation details.

  • Use Lookup Tables (Maps/Objects) instead of Switch/If-Else chains.
  • Use Guard Clauses (Early Returns) to avoid deep nesting.

4. Extract Modal Management

Goal: Centralize modal state and logic.

  • Move modal definitions to a generic <ModalManager /> or context if reused globally.
  • Keep the isOpen state locally if specific to a single component, but extract the Modal content to a separate file.

Workflow

  1. Analyze: Run complexity analysis or review the file manually.
  2. Plan: Identify seam lines (Logic vs UI, Section vs Section).
  3. Extract: Create new files for hooks or components.
  4. Integrate: Replace original code with imports.
  5. Verify: Ensure functionality remains identical and tests pass.

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon