Learning
Cursor IDE

Gyakorlati példák

React komponens generálás, bug javítás, refaktorálás, TypeScript típus generálás Cursorral.

Gyakorlati példák

React komponens generálása

Feladat: Hozz létre egy újrafelhasználható PriceTag komponenst, amely valutaformátumot jelenít meg.

Prompt a Composerben:

Hozz létre egy PriceTag komponenst TypeScript-ben és Tailwind CSS-sel.
A komponens fogadjon egy `amount: number` és `currency: string` propot.
Formázza a számot a lokális valuta formátum szerint.
Legyen egy opcionális `size` prop: "sm" | "md" | "lg"
Helyezd el a components/ui/PriceTag.tsx fájlba.

Generált eredmény:

// components/ui/PriceTag.tsx

interface PriceTagProps {
  amount: number;
  currency: string;
  size?: 'sm' | 'md' | 'lg';
}

const sizeClasses = {
  sm: 'text-sm font-medium',
  md: 'text-base font-semibold',
  lg: 'text-2xl font-bold',
};

export function PriceTag({ amount, currency, size = 'md' }: PriceTagProps) {
  const formattedPrice = new Intl.NumberFormat('hu-HU', {
    style: 'currency',
    currency,
  }).format(amount);

  return (
    <span className={`text-foreground ${sizeClasses[size]}`}>
      {formattedPrice}
    </span>
  );
}

Bug azonosítása és javítása

Feladat: A kosárban lévő termékek összege nem frissül, amikor a felhasználó mennyiséget változtat.

Prompt:

@components/cart/CartSummary.tsx
@hooks/useCart.ts

A CartSummary komponensben az összeg nem frissül,
amikor a useCart hook-ban a quantity változik.
Azonosítsd a problémát és javítsd ki.

Tipikus hiba és javítás:

// HIBÁS – stale closure, az összeg nem reaktív
const total = cart.items.reduce((sum, item) => {
  return sum + item.price * quantity; // quantity nem a helyes forrásból jön
}, 0);

// HELYES – minden értéket az item objektumból olvasunk
const total = cart.items.reduce((sum, item) => {
  return sum + item.price * item.quantity;
}, 0);

Refaktorálás – logika kiszervezése

Feladat: A komponens túl sok logikát tartalmaz, szervezzük ki custom hook-ba.

Prompt:

@components/checkout/CheckoutForm.tsx

Ez a komponens túl sok logikát tartalmaz.
Szervezd ki az összes form logikát és validációt
egy useCheckoutForm nevű custom hook-ba.
A komponens csak a renderelésre fókuszáljon.

Eredmény előtte/utána:

// ELŐTTE – mindent egy komponens tartalmaz (100+ sor)
export function CheckoutForm() {
  const [step, setStep] = useState(0);
  const [formData, setFormData] = useState({});
  // ... 80 sor logika
  
  return <form>...</form>;
}

// UTÁNA – szétválasztott felelősségek
// hooks/useCheckoutForm.ts
export function useCheckoutForm() {
  const [step, setStep] = useState(0);
  // ... logika itt
  return { step, nextStep, prevStep, formData, handleSubmit };
}

// components/checkout/CheckoutForm.tsx
export function CheckoutForm() {
  const { step, nextStep, formData, handleSubmit } = useCheckoutForm();
  return <form onSubmit={handleSubmit}>...</form>;
}

TypeScript típus generálás API válaszból

Prompt:

Az alábbi API válasz alapján generálj TypeScript interfészeket.
Minden mező legyen megfelelően típusos, a nullable mezők
legyenek `| null` típussal jelölve.

{
  "id": 123,
  "name": "Példa termék",
  "price": 4990,
  "discount": null,
  "categories": ["elektronika", "laptop"],
  "inStock": true
}

Generált típusok:

interface Product {
  id: number;
  name: string;
  price: number;
  discount: number | null;
  categories: string[];
  inStock: boolean;
}

📝 Összefoglaló

  • A Composer ideális komponens generáláshoz, ha pontos instrukciót adsz
  • Bug javításnál mindig hivatkozz az érintett fájlokra @ segítségével
  • Refaktorálásnál mondd el a célt (pl. "custom hook"), ne csak a feladatot
  • TypeScript típusok generálhatók JSON példa alapján is

On this page