التركيب · فصل ٢

قسّم وخلّي الأب يركّب

children · ProductImage · ProductInfo · buttons
🎯 الهدف: تقسّم الكارت لأجزاء، والأب يختار يركّب إيه، والحاوية تعرض children بس.

بدل ما الـ Product Card تتحكم في كل التفاصيل، قسّمها لمكونات صغيرة، وخلّي الأب هو اللي يركّبها بالشكل اللي محتاجه.

  • ProductCard: الحاوية الرئيسية.
  • ProductImage
  • ProductInfo
  • FavoriteButton
  • AddToCartButton

كل جزء مستقل، وتقدر تختار تركّب منه إيه حسب احتياجك.

parts.tsx
function ProductCard({ children }) {  return <div className="card">{children}</div>;}function ProductImage({ src }) {  return <img src={src} alt="" />;}function ProductInfo({ name, price }) {  return (    <div>      <h3>{name}</h3>      <p>{price}</p>    </div>  );}function AddToCartButton() {  return <button>Add to Cart</button>;}function FavoriteButton() {  return <button>♥</button>;}
ProductListItem.tsx
function ProductListItem({ product }) {  return (    <ProductCard>      <ProductImage src={product.image} />      <ProductInfo        name={product.name}        price={product.price}      />      <FavoriteButton />      <AddToCartButton />    </ProductCard>  );}
ProductCard مش محتاجة تعرف إيه اللي جواها. هي بس بتعرض children.

ده مثال بسيط على الـ Composition.

خلّصت الفصل لما

🧠 اختبر نفسك
١) ProductCard بتعرف إن جواها زرار مفضلة؟
لأ. بتعرض children بس.
٢) مين يقرر إن الكارت فيه Favorite و Add to Cart؟
الأب، زي ProductListItem، مش الحاوية.