react-component
React Component Patterns
Component Structure
Follow this order in every component file:
// 1. External imports
import { useState } from 'react';
import { useQuery } from '@tanstack/react-query';
// 2. Internal shared imports
import { Button } from '@/shared/ui/button';
import { useAuth } from '@/shared/hooks/useAuth';
// 3. Feature-specific imports
import { usePostEditor } from '../hooks/usePostEditor';
// 4. Types
interface PostEditorProps {
boardId: string;
initialContent?: string;
}
// 5. Component
export function PostEditor({ boardId, initialContent }: PostEditorProps) {
// hooks first
// derived state
// handlers
// render
}
Custom Hooks Pattern
Place business logic in [feature]/hooks/:
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { createPost } from '../api/post';
export function usePostEditor(boardId: string) {
const queryClient = useQueryClient();
const createMutation = useMutation({
mutationFn: (data: CreatePostData) => createPost(boardId, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['posts', boardId] });
},
});
return { createMutation };
}
Path Aliases
import { Component } from '@/shared/components/Component';
import { useHook } from '@board/hooks/useHook';
import { Post } from '@post/model/Post';
// Available: @/, @board/, @post/, @comment/, @draft/,
// @notification/, @user/, @shared/, @login/, @stats/
Quick Reference
| Location | Purpose |
|---|---|
[feature]/components/ |
React components |
[feature]/hooks/ |
Custom hooks with business logic |
[feature]/model/ |
TypeScript types |
@/shared/ui/ |
shadcn/ui components |
@/shared/hooks/ |
Shared hooks |
More from bumgeunsong/daily-writing-friends
firebase-functions
Use when creating or modifying Firebase Cloud Functions in /functions directory. Enforces function structure and error handling patterns.
43pr-stacking
PR stacking workflow for breaking large features into smaller, dependent PRs. Use when planning multi-step features, creating dependent branches, or rebasing stacked changes.
29commit
Use when creating git commits in this project
28refactoring
Use when user explicitly asks to refactor code, or when test coverage is requested for untested code with side effects. Enforces Functional Core Imperative Shell pattern extraction before any changes.
28api-layer
Use when creating or modifying API functions in */api/ directories. Enforces Firestore patterns and data fetching conventions.
28fetching-pr-comments
Use when needing to check PR review comments on current branch, before addressing reviewer feedback, or when asked to fetch/review PR comments
28