2 שלב הבסיס

React — המלך שכל כלי AI מדבר בו

למה כמעט כל כלי AI מייצר React? מה זה קומפוננטה? איך קוראים JSX בלי להיבהל? בסוף הפרק הזה — תדעו בדיוק מה AI בונה ואיך לכוון אותו טוב יותר.

מה תדעו בסוף הפרק הזה
לפני שמתחילים

אין צורך בסביבת פיתוח. הפרק הזה מתמקד בקריאה והבנה, לא בכתיבת קוד.

מה יהיה לכם בסוף הפרק
הקו האדום — איפה אנחנו

פרק קודם (01): למדנו את שלוש השכבות — HTML, CSS, JavaScript — ואיך הדפדפן בונה עמוד. הבנו מה זה framework ולמה הוא קיים.

הפרק הזה (02): נצלול ל-React — ה-framework שכמעט כל כלי AI משתמש בו. נלמד לקרוא את הקוד שAI מייצר.

פרק הבא (03): נכיר את ה-Meta-Frameworks — Next.js, Remix, Astro — ונבין מתי לבקש מ-AI כל אחד.

מילון מונחים — פרק 2
מונחהסבר
Reactספריית JavaScript לבניית ממשקי משתמש מבוססי קומפוננטות. נוצרה על ידי Meta (פייסבוק) ב-2013.
Componentיחידת UI עצמאית, ניתנת לשימוש חוזר — כמו לבנת LEGO. יכולה להיות כפתור קטן או עמוד שלם.
JSXתחביר שמאפשר לכתוב HTML בתוך JavaScript. נראה כמו HTML, מתנהג כמו JavaScript.
PropsProperties — נתונים שעוברים מקומפוננטה הורה לילד. לא ניתנים לשינוי (read-only).
Stateנתונים שמשתנים בזמן ריצה — לחיצות, קלט, טעינת נתונים. כש-state משתנה, הדף מתעדכן.
Virtual DOMעותק וירטואלי של ה-DOM בזיכרון. React משווה בין הישן לחדש ומעדכן רק מה שהשתנה.
Hookפונקציה מיוחדת של React (מתחילה ב-use). מאפשרת state ו-side effects בקומפוננטות.
useStateHook שיוצר משתנה state. מחזיר את הערך הנוכחי + פונקציה לעדכון שלו.
useEffectHook שמריץ קוד אחרי שהקומפוננטה מוצגת — לטעינת נתונים, timers, ועוד.
Component Treeמבנה היררכי — App בראש, וכל קומפוננטה מכילה ילדים. כמו עץ משפחה.
Re-renderingכש-state משתנה, React מחשב מחדש מה להציג ומעדכן את המסך.
Server Componentקומפוננטה שרצה בצד השרת. ברירת מחדל ב-Next.js 15. חוסכת JavaScript בדפדפן.
Client Componentקומפוננטה שרצה בדפדפן. נדרשת ל-interactivity. מסומנת ב-'use client'.
מתחילים תיאוריה חינמי

למה React שולט בעולם ה-AI

הנה עובדה שצריכה לשנות את הדרך שבה אתם חושבים על בניית אתרים עם AI:

כמעט כל כלי AI שבונה אתרים — מייצר React.

V0 של Vercel? React + Next.js + Tailwind + shadcn/ui. Bolt.new? React. Lovable? React. Cursor? React הוא ברירת המחדל. Claude Code? כשמבקשים ממנו לבנות אתר — 9 מתוך 10 פעמים התוצאה תהיה React.

למה? שלוש סיבות:

  1. קוד לימוד ענק: React קיים מ-2013, ויש לו את בסיס הקוד הגדול ביותר באינטרנט. מודלי AI אומנו על מיליוני קבצי React — הם פשוט "יודעים" React הכי טוב. על פי npm trends, React מוריד כ-28 מיליון פעמים בשבוע — יותר מ-Vue, Angular ו-Svelte ביחד.
  2. אקוסיסטם עשיר: כשAI בונה עמוד, הוא צריך ספריות קומפוננטות (shadcn/ui), framework (Next.js), עיצוב (Tailwind). לReact יש את האקוסיסטם הכי שלם — אלפי ספריות, תבניות, וכלים שעובדים ביחד.
  3. קומפוננטות: React בנוי סביב רעיון של חלקים ניתנים לשימוש חוזר. זה מושלם ל-AI — הוא יכול לבנות כל חלק בנפרד ולחבר ביניהם. זה כמו LEGO: בניית בלוקים קטנים שמתחברים לדבר גדול.

בואו נראה בדיוק מה כל כלי AI מייצר כברירת מחדל:

כלי AIStack ברירת מחדלמה מקבלים
V0 (Vercel)React + Next.js 15 + TypeScript + Tailwind + shadcn/uiקומפוננטות מוכנות, עיצוב נקי, responsive
Bolt.newReact + Vite או Next.js + Tailwindפרויקט שלם עם routing ומבנה תיקיות
LovableReact + Vite + TypeScript + Tailwind + shadcn/uiאפליקציה מלאה עם דפים, auth, database
Claude CodeReact + Next.js (לפי הבקשה)קוד מותאם אישית לפי מה שמבקשים
CursorReact (לפי הפרויקט הקיים)עריכה והשלמה של קוד קיים

שימו לב לדפוס: כולם React. גם כשהם שונים ב-framework (Next.js vs Vite) או בספריות — הבסיס תמיד React. זה לא מקרי.

מה זה אומר עבורכם כ-Vibe Coders? אם תבינו React — תבינו את רוב הקוד שכלי AI מייצרים כברירת מחדל (בהתבסס על תצפית בפלט של V0, Lovable, Bolt ו-Cursor נכון ל-2025). לא צריך ללמוד לכתוב React. צריך ללמוד לקרוא אותו, להבין מה הוא עושה, ולדעת לכוון את ה-AI כשהתוצאה לא בדיוק מה שרציתם.

חשבו על זה ככה: אם AI הוא הטבח, React הוא השפה שבה הוא מבשל. אתם לא צריכים להיות טבחים — אבל אם תבינו את השפה, תוכלו להזמין בדיוק מה שאתם רוצים ולשלוח חזרה למטבח כשמשהו לא בסדר.

קצת היסטוריה — מאיפה React בא

React נוצר בפייסבוק (היום Meta) ב-2013. הבעיה שהוא פתר: פייסבוק היה אתר ענקי עם אלפי אלמנטים שמשתנים בו-זמנית — התראות, הודעות, feed, לייקים. לעדכן את כל זה עם JavaScript רגיל היה סיוט של באגים.

הפתרון של React: Virtual DOM — עותק וירטואלי של הדף שחי בזיכרון. במקום לעדכן את ה-HTML הישירות (שזה איטי ומסוכן), React מחשב מה צריך להשתנות על העותק הוירטואלי, ואז מעדכן רק את ההבדלים בדף האמיתי. כמו עורך שקודם סוקר את כל התיקונים על טיוטה, ורק אז שולח את הגרסה הסופית לדפוס.

מאז 2013, React עבר כמה אבולוציות חשובות:

שנהמה קרהלמה חשוב
2013React 0.3 — השקה ראשונההולדת React בפייסבוק
2015React Native — React למוביילאותם concepts, גם לאפליקציות
2019React 16.8 — HooksuseState/useEffect — המהפכה הכי גדולה
2022React 18 — Concurrent Modeביצועים משופרים, Suspense
2024React 19 — Server Componentsקוד בצד השרת, ביצועים מטורפים

הנקודה: React מתפתח, אבל היסודות יציבים. קומפוננטות, props, state — אלה אותם concepts מ-2013. מה שהשתנה זה ה-tools (hooks במקום classes, Server Components) — אבל הרעיון המרכזי זהה. זה בדיוק למה זה חשוב ללמוד את היסודות: הם לא ישתנו.

נקודה חשובה לגבי class components: אם תמצאו באינטרנט מדריכי React שמשתמשים ב-class MyComponent extends React.Component — זה סגנון ישן. כל כלי AI מייצר כיום functional components עם hooks. אתם לא צריכים ללמוד class components כלל — הם קיימים בקוד ישן אבל שום כלי AI לא מייצר אותם יותר. אם AI בטעות מייצר class component — בקשו: "Convert this to a functional component with hooks".

טעות נפוצה: לנסות ללמוד לכתוב React

הרבה Vibe Coders מנסים ללמוד "פיתוח React" — קורסים של 40 שעות, פרויקטים מאפס, ומתסכלים כשזה לא מצליח. אתם לא צריכים לכתוב React. AI כותב. אתם צריכים לקרוא, להבין, ולכוון. זה כמו ההבדל בין לדעת לנהוג לבין לדעת לבנות מנוע — שניהם חשובים, אבל לנהוג זה מה שמביא אתכם ליעד.

עשו עכשיו

פתחו את v0.dev וכתבו: build a landing page hero section with a headline, subtitle, and CTA button. שימו לב — הפלט הוא React + Next.js. צלמו screenshot ושמרו — נחזור לזה בהמשך הפרק.

זמן: 3 דקות

טעות נפוצה: מבקשים מ-AI vanilla JS אבל מקבלים React

זה תרחיש חוזר: אתם כותבים ל-AI "build me a simple landing page" או "add a counter to this HTML file" — ומקבלים בתגובה קוד עם import React, useState ו-.jsx. כלים כמו V0, Lovable ו-Bolt מייצרים React כ-default — זו ברירת המחדל שלהם, לא התוצאה של ההוראה שלכם. אם אתם מצרפים את הקוד ל-HTML סטטי, הוא פשוט לא ירוץ.

הפתרון: אם אתם רוצים vanilla JS — ציינו במפורש: "Plain HTML + vanilla JavaScript only. No React, no JSX, no build step. Single index.html file." אם אתם בונים פרויקט React — אל תילחמו בזה; תנו ל-AI לעבוד בסביבה הטבעית שלו (V0 / Lovable / Next.js project). המחיר של ניסיון להכריח vanilla על כלי שמכוון ל-React גבוה מהרווח.

מתחילים תיאוריה + תרגול חינמי

חשיבה בקומפוננטות — לראות את העמוד אחרת

הרעיון הכי חשוב ב-React — ואולי הרעיון הכי חשוב שתלמדו בקורס הזה — הוא חשיבה בקומפוננטות (Component Thinking). זה הרעיון שיותר מכל דבר אחר ישפר את התוצאות שאתם מקבלים מ-AI.

מה זה אומר? במקום לראות עמוד אינטרנט כמקשה אחת, אתם רואים אותו כאוסף של חלקים עצמאיים:

כל חלק כזה הוא קומפוננטה (Component) — מילה שתשמעו מאות פעמים כשעובדים עם AI. ב-React, קומפוננטה היא בעצם פונקציה שמקבלת נתונים ומחזירה UI. אבל לא צריך לחשוב על זה טכנית — חשבו על קומפוננטה כמו לבנת LEGO: חלק עצמאי שאפשר לשלב עם חלקים אחרים כדי לבנות משהו גדול.

כל קומפוננטה:

  1. עצמאית — יש לה קוד משלה, סגנון משלה, התנהגות משלה
  2. ניתנת לשימוש חוזר — קומפוננטת Card יכולה להופיע 10 פעמים בעמוד, כל פעם עם תוכן שונה
  3. ניתנת להרכבה — קומפוננטות בתוך קומפוננטות (Hero מכיל Button, ש-Button מכיל Icon)

למה זה כל כך חשוב ל-Vibe Coders? כי ככה AI חושב. כשאתם אומרים ל-V0 "build me a pricing page" — הוא לא בונה עמוד אחד ארוך. הוא בונה קומפוננטות: PricingPage שמכיל PricingHeader, שלושה PricingCard, ו-FAQ.

וכשאתם רוצים לשנות משהו? במקום "change the page" — אתם יכולים להגיד: "change the PricingCard component to show annual pricing". זה הרבה יותר מדויק, ו-AI יתן תוצאה הרבה יותר טובה.

Component Tree — עץ הקומפוננטות

קומפוננטות מסודרות בצורה היררכית — כמו עץ משפחה. בראש יש קומפוננטה אחת (App), ומתחתיה יש ילדים (children), שלכל אחד יכולים להיות ילדים משלו:

Component Tree — עץ קומפוננטות App Header Main Footer Logo Nav Hero CardList Card Card Card כל קופסה = קומפוננטה | הקווים = יחסי הורה-ילד | App = השורש

שימו לב: CardList מכילה 3 קומפוננטות Card — אותה קומפוננטה, 3 פעמים, עם תוכן שונה בכל פעם. זה השימוש החוזר בפעולה.

דוגמה ישראלית: פירוק monday.com

בואו ניקח דוגמה אמיתית. נכנסים ל-monday.com (חברה ישראלית, הכל בנוי ב-React) ומסתכלים על עמוד הבית:

כל אחד מהחלקים האלה הוא קומפוננטה עצמאית. ה-FeatureCards מכילה 6 כרטיסי FeatureCard — אותו מבנה, תוכן שונה. ה-TestimonialCarousel מכילה כרטיסי Testimonial שמתחלפים. זה הכוח של חשיבה בקומפוננטות — פעם אחת מגדירים את הצורה, הרבה פעמים משתמשים עם תוכן שונה.

כש-Vibe Coder רוצה לבנות אתר דומה עם AI, הוא לא אומר "build me a homepage like monday.com". הוא אומר:

Build a homepage with these components:
1. TopBar with logo, nav links, and a purple CTA button
2. Hero section with animated headline and subtitle
3. TrustedBy section with 6 company logos
4. Feature grid with 6 FeatureCards (icon, title, description each)
5. Testimonial carousel with 3 quotes
6. Footer with 4 link columns

ההבדל? ה-prompt הראשון נותן ל-AI מעט מדי מידע. ה-prompt השני — עם שפת קומפוננטות — נותן ל-AI בדיוק את המבנה שהוא צריך. התוצאה תהיה קרובה בהרבה למה שרציתם.

כללי שמות קומפוננטות

כשאתם מדברים עם AI על קומפוננטות, חשוב להשתמש בשמות נכונים. ב-React יש convention ברור:

כשאתם מבקשים מ-AI לבנות קומפוננטות — השתמשו בשמות PascalCase. AI יבין שאתם מדברים על React component ולא על אלמנט HTML רגיל. ההבדל בין "build a card" לבין "build a ProductCard component" הוא שAI בגרסה השנייה ייצור קומפוננטה עצמאית עם props, ולא סתם div עם class.

טיפ נוסף: כשAI בונה לכם קוד ואתם רואים שם לא ברור כמו Component1 או MyComponent — בקשו ממנו: "Rename the component to a descriptive name that explains its purpose". שמות טובים הם תיעוד חי — גם אתם וגם AI יבינו את הקוד טוב יותר בעתיד.

עשו עכשיו

פתחו אתר שאתם אוהבים (יכול להיות monday.com, wix.com, או כל אתר אחר). צרו רשימה של 5 קומפוננטות שאתם מזהים — header, card, button, footer, sidebar. כתבו את הרשימה.

זמן: 4 דקות

עשו עכשיו

ציירו (על נייר או בכלי דיגיטלי) את ה-component tree של עמוד הבית של האתר שבחרתם — App בראש, ומתחתיו הקומפוננטות שזיהיתם. בדקו: האם יש קומפוננטות שחוזרות (כמו Card)?

זמן: 5 דקות

מתחילים תיאוריה חינמי

מה זה JSX — HTML עם סופר-כוחות

כשתפתחו קוד React שAI כתב, הדבר הראשון שתראו הוא JSX. זה נראה כמו HTML, אבל הוא חי בתוך JavaScript. בואו נפרק את זה:

function HeroSection({ title, subtitle }) {
  return (
    <div className="hero">
      <h1>{title}</h1>
      <p>{subtitle}</p>
      <button className="cta-btn">
        התחילו עכשיו
      </button>
    </div>
  );
}

נפרק את מה שקורה פה:

מה רואיםמה זהמקבילה ב-HTML רגיל
function HeroSectionהגדרת קומפוננטה — זו פונקציה שמחזירה UIאין מקבילה — זה React
({ title, subtitle })Props — נתונים שנכנסים לקומפוננטהכמו attributes ב-HTML
<div className="hero">JSX — נראה כמו HTML, אבל className במקום class<div class="hero">
{title}ביטוי JavaScript — הערך של title יוצג כאןאין מקבילה ישירה
return (...)מה שהקומפוננטה מציגה על המסךה-HTML שנשלח לדפדפן

שלושה הבדלים קריטיים בין JSX ל-HTML:

  1. className במקום class — כי class הוא מילה שמורה ב-JavaScript
  2. סוגריים מסולסלים {} — לכל מקום שרוצים JavaScript (משתנים, חישובים, תנאים)
  3. כל קומפוננטה מתחילה באות גדולהHeroSection, לא heroSection
טיפ למתחילים

אל תנסו לזכור את כל ההבדלים. הכלל הפשוט: JSX = HTML + JavaScript ביחד. כשרואים <div> — זה HTML. כשרואים {something} — זה JavaScript. וכשרואים function Something — זו קומפוננטה.

עשו עכשיו

חזרו לקטע הקוד למעלה. זהו 3 דברים: (1) תגית HTML רגילה, (2) ביטוי JavaScript בתוך {}, (3) props שמועברים. רשמו את התשובות.

זמן: 3 דקות

איך לקרוא JSX שAI כתב — צעד אחרי צעד

כשאתם פותחים קובץ React שAI יצר, ככה תקראו אותו:

  1. שלב 1 — מצאו את שם הפונקציה: חפשו function Something או export default function Something. זה שם הקומפוננטה.
  2. שלב 2 — בדקו את הסוגריים: ({ ... }) אחרי שם הפונקציה = Props שנכנסים.
  3. שלב 3 — מצאו את ה-return: כל מה שבתוך return (...) הוא ה-UI שמוצג על המסך.
  4. שלב 4 — זהו סוגריים מסולסלים: כל {something} בתוך ה-JSX הוא ביטוי JavaScript — משתנה, חישוב, או תנאי.
  5. שלב 5 — חפשו imports: בשורות הראשונות של הקובץ — import מראה אילו קומפוננטות/ספריות נמשכות מבחוץ.

זהו. 5 צעדים. עם הזמן זה הופך לאוטומטי — כמו קריאת מתכון: קודם רואים את הכותרת (שם הקומפוננטה), אחר כך את החומרים (props ו-imports), ואז את ההוראות (ה-JSX בתוך return).

Conditional Rendering — הצגה מותנית

אחד הדברים שJSX מאפשר ו-HTML לא — הצגה מותנית. זה אומר: "הצג את זה רק אם..."

function Notification({ count }) {
  return (
    <div>
      {count > 0 && (
        <span className="badge">{count} הודעות חדשות</span>
      )}
    </div>
  );
}

השורה {count > 0 && (...)} אומרת: "אם יש הודעות — הצג badge. אם אין — אל תציג כלום." זה pattern שתראו בכל פלט של AI — עכשיו אתם יודעים מה הוא אומר.

יש גם צורה שנייה של conditional rendering — ternary (שלושני):

{isLoggedIn ? (
  <span>שלום, {userName}</span>
) : (
  <button>התחברות</button>
)}

הסינטקס condition ? showIfTrue : showIfFalse אומר: "אם מחובר — הצג שם. אם לא — הצג כפתור התחברות." זה pattern שתראו בכל header שAI בונה — חלק מהתפריט משתנה לפי האם המשתמש מחובר או לא.

טיפ מעשי: כשAI בונה לכם header עם כפתור login — בדקו שיש conditional rendering שמציג תוכן שונה למשתמש מחובר ולא מחובר. אם אין — בקשו: "Add conditional rendering: show user name and avatar if logged in, show login button if not".

Lists ו-map — הצגת רשימות

עוד pattern קריטי ב-JSX שתראו בכל פלט AI: רשימות. כשצריך להציג כרטיסים, פריטי תפריט, או כל רשימה — React משתמש ב-.map():

const features = ["מהיר", "בטוח", "אמין", "חינמי"];

return (
  <ul>
    {features.map((feature) => (
      <li key={feature}>{feature}</li>
    ))}
  </ul>
);

.map() לוקח מערך (array) ויוצר JSX לכל פריט. ה-key הוא מזהה ייחודי שReact צריך כדי לעקוב אחרי כל פריט ברשימה (מה נוסף, מה הוסר, מה שינה מיקום).

תראו .map() בכל מקום: רשימת מוצרים, כרטיסי מחיר, פריטי ניווט, תגובות, גלריית תמונות — כל דבר שחוזר על עצמו. כשתזהו .map() בקוד — תדעו: "אה, פה יש רשימה שמוצגת דינמית".

מתחילים תיאוריה חינמי

Props — מידע שזורם למטה

Props (קיצור של Properties) הם הנתונים שעוברים מקומפוננטה הורה לקומפוננטה ילד. חשבו על זה ככה: כשAI בונה כרטיס מוצר, הוא לא שם את הנתונים ישירות בתוך הכרטיס — הוא מקבל אותם מבחוץ:

// הקומפוננטה ההורה שולחת נתונים:
<ProductCard
  name="קורס React"
  price="299"
  image="/react-course.jpg"
  isPopular={true}
/>

// הקומפוננטה הילד מקבלת ומציגה:
function ProductCard({ name, price, image, isPopular }) {
  return (
    <div className="card">
      {isPopular && <span className="badge">פופולרי</span>}
      <img src={image} alt={name} />
      <h3>{name}</h3>
      <p className="price">₪{price}</p>
    </div>
  );
}
Props — זרימת נתונים מלמעלה למטה App (הורה) name, price, image, isPopular props זורמים למטה ProductCard (ילד) מציג: {name}, {price}, {image} Props = Read-Only הילד לא יכול לשנות את ה-props זרימה חד-כיוונית תמיד מהורה → ילד, לא הפוך

כללים חשובים על Props:

למה זה חשוב ל-Vibe Coders? כשאתם רואים שAI בנה כרטיס מוצר עם מחיר קבוע — אתם יודעים שצריך לבקש ממנו להפוך את המחיר ל-prop. ככה תוכלו להשתמש באותו כרטיס עם מחירים שונים.

דוגמה מעשית: מ-Hardcoded ל-Props

נניח שAI בנה לכם כרטיס שירות ככה:

function ServiceCard() {
  return (
    <div className="card">
      <h3>עיצוב אתרים</h3>
      <p>נבנה לכם אתר מרהיב ומותאם לנייד</p>
      <span className="price">₪3,500</span>
    </div>
  );
}

הבעיה: הכל hardcoded (קבוע בקוד). אם רוצים 3 כרטיסי שירות — צריך 3 קומפוננטות זהות עם טקסט שונה. זה שיכפול מיותר.

מה לבקש מ-AI: "Make ServiceCard accept title, description, and price as props so I can reuse it for multiple services"

התוצאה:

function ServiceCard({ title, description, price }) {
  return (
    <div className="card">
      <h3>{title}</h3>
      <p>{description}</p>
      <span className="price">₪{price}</span>
    </div>
  );
}

// עכשיו אפשר להשתמש 3 פעמים:
<ServiceCard title="עיצוב אתרים" description="אתר מרהיב ומותאם" price="3,500" />
<ServiceCard title="SEO" description="קידום אורגני בגוגל" price="2,000" />
<ServiceCard title="קופירייטינג" description="תוכן שמוכר" price="1,500" />

עכשיו יש לכם קומפוננטה אחת, שמשמשת 3 פעמים עם נתונים שונים. זה הכוח של Props — קומפוננטה גנרית ששימושית בהרבה מקומות.

עשו עכשיו

בקטע הקוד למעלה — זהו איזה props עוברים מ-App ל-ProductCard. רשמו אותם ואת הסוג שלהם (string, number, boolean).

זמן: 2 דקות

מתחילים תיאוריה חינמי

State — מידע שמשתנה בזמן אמת

אם Props הם מידע שנכנס מבחוץ ולא משתנה, State הוא מידע שמשתנה בזמן ריצה. חשבו על:

ככה זה נראה בקוד:

function ToggleMenu() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>
        {isOpen ? "סגור תפריט" : "פתח תפריט"}
      </button>
      {isOpen && (
        <nav className="menu">
          <a href="/">ראשי</a>
          <a href="/about">אודות</a>
          <a href="/contact">צור קשר</a>
        </nav>
      )}
    </div>
  );
}

מה קורה פה?

  1. useState(false) — יוצר state בשם isOpen שמתחיל כ-false (סגור)
  2. setIsOpen(!isOpen) — כשלוחצים על הכפתור, הופך את המצב (פתוח → סגור, סגור → פתוח)
  3. {isOpen && (...)} — מציג את התפריט רק כשהוא פתוח

זה מה שקורה כש-state משתנה — Re-rendering:

Re-rendering — מעגל העדכון של React פעולת משתמש לחיצה, הקלדה setState() State משתנה React מחשב מה השתנה? עדכון DOM המעגל חוזר בכל שינוי state React מעדכן רק מה שהשתנה — לא את כל הדף. לכן הוא מהיר.

זה המנגנון המרכזי של React: משתמש עושה פעולה → state משתנה → React מחשב מה השתנה → רק החלק הרלוונטי מתעדכן. זה מה שהופך אתרי React למהירים ואינטראקטיביים.

Props vs State — טבלת ההבדלים המלאה

זה ההבדל הכי חשוב להבין כ-Vibe Coder. בואו נראה אותו בצורה ברורה:

מאפייןPropsState
מי מגדיר?ההורה (מבחוץ)הקומפוננטה עצמה (מבפנים)
ניתן לשינוי?לא — read-onlyכן — דרך setState
כיוון הזרימהמלמעלה למטה (הורה → ילד)פנימי לקומפוננטה
דוגמהכותרת כרטיס, תמונה, מחירתפריט פתוח/סגור, נתונים שנטענו
מתי לציין ל-AI?"make this component accept title and image as props""add toggle state for the modal"
אנלוגיהכמו פרמטרים שמעבירים לפונקציהכמו משתנה פנימי שהפונקציה מעדכנת

כלל אצבע פשוט: אם המידע קבוע לכל instance של הקומפוננטה — זה prop. אם המידע משתנה בתגובה לפעולת משתמש — זה state.

דוגמה: כרטיס מוצר. ה-שם של המוצר הוא prop (קבוע, מגיע מבחוץ). אבל האם המוצר בעגלה — זה state (משתנה כשלוחצים "הוסף לעגלה").

טעות נפוצה: לא לציין ל-AI מה ה-state

אם אתם מבקשים מ-AI "build a dropdown menu" בלי לציין שהתפריט צריך להיפתח ולהיסגר — אתם עלולים לקבל תפריט סטטי שתמיד פתוח. תמיד ציינו: "the dropdown should open/close on click" או "add toggle state for the menu". כשאתם מזכירים state — AI יוסיף useState ואת הלוגיקה המתאימה.

טעות נפוצה: בלבול בין props ל-state בפרומפט

דוגמה שאנחנו רואים כל שבוע: מישהו כותב ל-AI "add a state for the product title and price so I can reuse the card". התוצאה? AI מייצר useState מיותר לכל כרטיס, הקוד מתנפח, וכל פעם שה-title משתנה הקומפוננטה עושה re-render מיותר. הבעיה: title ו-price הם props, לא state — הם מגיעים מבחוץ וקבועים לכל כרטיס, לא משתנים בתגובה לפעולת משתמש.

Before (שגוי): "Create a ProductCard with state for title, price, and image"

After (נכון): "Create a ProductCard that accepts title, price, and image as props. Add internal state only for isInCart (toggled by the 'Add to cart' button)."

כלל פשוט לפני שאתם שולחים prompt: עברו על כל משתנה ושאלו "האם הוא משתנה בתגובה לפעולת משתמש?". אם כן — state. אם לא — prop. זה חוסך איטרציות ומונע קוד שבור.

עשו עכשיו

חשבו על 3 דוגמאות ל-state באתר שאתם משתמשים בו יום-יום. לכל דוגמה כתבו: (1) מה ה-state, (2) מה המשתמש עושה כדי לשנות אותו, (3) מה משתנה על המסך.

זמן: 3 דקות

מסגרת החלטה: מתי לציין ל-AI שצריך State
המצבצריך State?מה להגיד ל-AI
דף סטטי (About, Landing)לא"static page, no interactivity needed"
תפריט שנפתח ונסגרכן"menu with open/close toggle state"
טופס עם validationכן"form with validation state for each field"
טאבים / אקורדיוןכן"tabs with active tab state"
Dark/Light modeכן"theme toggle with dark mode state"
טעינת נתונים מ-APIכן"data fetching with loading and error states"
עגלת קניותכן"shopping cart with items array state"

כלל אצבע: אם משהו על המסך צריך להשתנה בתגובה לפעולת משתמש — יש state. אם הדף רק מציג מידע קבוע — אין צורך.

מתחילים-בינוני תיאוריה חינמי

Hooks בגובה העיניים — useState ו-useEffect

Hooks הם פונקציות מיוחדות של React שמתחילות תמיד ב-use. הם מאפשרים לקומפוננטות לעשות דברים מעבר להצגת UI — כמו לנהל state, לטעון נתונים, או להגיב לשינויים.

אתם לא צריכים לכתוב hooks. אתם צריכים לזהות אותם בקוד שAI כותב. הנה שני ה-hooks שתראו ב-95% מהמקרים:

useState — ניהול state

כבר ראינו את זה:

const [count, setCount] = useState(0);
// count = הערך הנוכחי (מתחיל ב-0)
// setCount = הפונקציה לשינוי הערך

כשתראו useState בקוד AI — חפשו שני דברים: (1) מה הערך ההתחלתי, (2) איפה set... נקרא (מה גורם לשינוי).

useEffect — תופעות לוואי

useEffect(() => {
  // הקוד הזה רץ אחרי שהקומפוננטה מוצגת
  fetch('/api/products')
    .then(res => res.json())
    .then(data => setProducts(data));
}, []); // [] = רק פעם אחת, בטעינה ראשונה

useEffect אומר ל-React: "אחרי שהצגת את הקומפוננטה — תריץ את הקוד הזה." שימושים נפוצים:

המפתח לזיהוי: כשתראו useEffect בקוד AI — זה אומר שמשהו קורה "מאחורי הקלעים". בדרך כלל טעינת נתונים.

דוגמה מלאה: קומפוננטה עם useState ו-useEffect ביחד

הנה דוגמה שמשלבת את שני ה-hooks — טעינת רשימת מוצרים עם loading state:

"use client";
import { useState, useEffect } from "react";

function ProductList() {
  const [products, setProducts] = useState([]);     // state: רשימת מוצרים (מתחיל ריק)
  const [isLoading, setIsLoading] = useState(true); // state: האם עדיין טוען?

  useEffect(() => {
    // רץ פעם אחת כשהקומפוננטה נטענת
    fetch("/api/products")
      .then(res => res.json())
      .then(data => {
        setProducts(data);      // שומר את המוצרים
        setIsLoading(false);    // מפסיק loading
      });
  }, []);

  if (isLoading) return <p>טוען מוצרים...</p>;

  return (
    <div className="grid grid-cols-3 gap-4">
      {products.map(product => (
        <div key={product.id}>
          <h3>{product.name}</h3>
          <p>₪{product.price}</p>
        </div>
      ))}
    </div>
  );
}

מה קורה פה?

  1. useState([]) — יוצר state ריק למוצרים
  2. useState(true) — יוצר loading state שמתחיל כ-true (עדיין טוען)
  3. useEffect — כשהקומפוננטה נטענת, מביא נתונים מהשרת
  4. כשנתונים מגיעים — מעדכן את products ומכבה את loading
  5. אם עדיין טוען — מציג "טוען מוצרים..."
  6. כשהנתונים מוכנים — מציג grid של מוצרים

זה pattern מאוד נפוץ בקוד שAI מייצר. כל פעם שיש דף שטוען נתונים — תראו את השילוב הזה של useState + useEffect + loading state. עכשיו שאתם מזהים את ה-pattern — אתם יודעים בדיוק מה קורה.

למה כל זה חשוב אם AI כותב את הקוד?

שאלה לגיטימית: אם AI כותב את הקוד, למה צריך להבין hooks? התשובה: כי AI לא תמיד עושה את הבחירה הנכונה. הנה מצבים שקורים בפועל:

כל אחד מהמצבים האלה דורש שתזהו את ה-pattern בקוד — ותדעו לבקש מ-AI את התיקון הנכון. בלי הבנה של hooks — לא תדעו שיש בעיה. עם הבנה — תזהו בשניות ותתקנו ב-prompt אחד.

Hookמה הוא עושהמתי תראו אותו בקוד AI
useStateמנהל state — ערך שמשתנהכל פעם שיש אינטראקציה — toggle, form, counter
useEffectמריץ קוד אחרי renderטעינת נתונים, הרשמה לאירועים, timers
useRefשומר הפניה לאלמנט DOMfocus על input, scroll לאלמנט, video controls
useContextקורא ערך context (גלובלי)theme, language, authentication
עשו עכשיו

חזרו לפלט של V0 (מהתרגול הראשון). חפשו את המילה useState בקוד — כמה פעמים היא מופיעה? מה כל אחת שומרת? אם אין useState — הפלט הוא סטטי לגמרי.

זמן: 3 דקות

בינוני תיאוריה חינמי

React 19 — מה חדש ולמה זה משנה

React 19 שוחרר בדצמבר 2024, וב-2026 הוא כבר הסטנדרט. הנה מה שחשוב לדעת כ-Vibe Coders:

Server Components — קומפוננטות בצד השרת

הרעיון הגדול ביותר ב-React 19: לא כל הקוד צריך לרוץ בדפדפן.

קומפוננטות שלא צריכות interactivity (כמו header סטטי, רשימת מאמרים, footer) יכולות לרוץ בצד השרת ולשלוח HTML מוכן לדפדפן. זה מהיר יותר ומקטין את כמות ה-JavaScript שנשלחת למשתמש.

ב-Next.js 15 (שזה מה שV0 ו-Bolt מייצרים), Server Components הם ברירת המחדל. קומפוננטה שצריכה interactivity צריכה להיות מסומנת במפורש:

"use client"; // ← השורה הזו אומרת: הקומפוננטה רצה בדפדפן

import { useState } from "react";

function ThemeToggle() {
  const [isDark, setIsDark] = useState(false);
  // ...
}

מה זה אומר עבורכם? כשתראו "use client" בראש קובץ — זו קומפוננטה שרצה בדפדפן. כשאין את השורה הזו — היא רצה בשרת.

עוד חידושים ב-React 19

פיצ'רמה הוא עושהלמה חשוב
Actionsטיפול בטפסים בצד השרתAI ייצר form handling פשוט יותר
use() hookקריאת promises ו-context ישירותטעינת נתונים פשוטה יותר
Document Metadata<title> ו-<meta> בתוך קומפוננטותSEO יותר קל
React Compilerאופטימיזציה אוטומטית (ניסיוני)פחות useMemo/useCallback בקוד

Server vs Client — מתי מה?

הנה הכלל הפשוט:

בפועל, כשAI בונה עמוד ב-Next.js 15 — רוב העמוד יהיה Server Component (מהיר, חסכוני), ורק החלקים האינטראקטיביים יהיו Client Components. זה כמו שרק חלק מהמכונית צריך מנוע — השאר יכול להיות קל ופשוט.

טיפ: בקשו מ-AI את הגרסה החדשה

כשמבקשים מ-AI לבנות קומפוננטה, הוסיפו: "use React 19 with Server Components where possible". ככה תקבלו קוד מודרני שמנצל את היתרונות האחרונים — פחות JavaScript בדפדפן, ביצועים טובים יותר. אם ה-AI מוסיף "use client" לכל קובץ — בקשו ממנו: "keep static parts as Server Components, only use 'use client' for interactive elements".

מתחילים תיאוריה חינמי

האקוסיסטם של React — Next.js ומעבר לו

React לבד הוא "רק" ספרייה לבניית UI. כדי לבנות אתר שלם — צריך framework שמוסיף routing, SSR, ועוד. הנה השחקנים העיקריים:

Frameworkמי מאחוריומתי להשתמששימוש בכלי AI
Next.js Vercel אתרים עם דפים, SEO, API routes — כמעט כל פרויקט V0, Bolt, Lovable — כולם
Remix Shopify אפליקציות עם web standards, progressive enhancement פחות נפוץ בכלי AI
Gatsby Netlify בלוגים וsites עם תוכן סטטי — פחות פופולרי כיום כמעט לא
Astro קהילת קוד פתוח אתרי תוכן (בלוגים, דוקומנטציה) — מעולה לביצועים Bolt תומך
React Native Meta אפליקציות מובייל (iOS + Android) — אותם concepts שימוש בנפרד

שורה תחתונה: ב-95% מהמקרים, כשאתם עובדים עם AI על אתר — אתם עובדים עם Next.js. בפרק 3 נצלול לעומק לכל ה-frameworks, אבל הנקודה החשובה עכשיו היא להבין שReact ≠ Next.js.

Next.js — למה הוא כל כך חשוב

Next.js הוא ה-framework הכי פופולרי שבנוי מעל React. הוא מוסיף את כל מה ש-React לבד לא נותן:

כש-V0 בונה לכם עמוד — הוא בונה אותו ב-Next.js App Router, עם מבנה תיקיות כזה:

app/
  layout.tsx        ← תבנית כללית (header, footer)
  page.tsx          ← עמוד הבית
  about/
    page.tsx        ← עמוד About
  pricing/
    page.tsx        ← עמוד מחירים
  components/
    Header.tsx      ← קומפוננטת Header
    Footer.tsx      ← קומפוננטת Footer
    PricingCard.tsx  ← קומפוננטת כרטיס מחיר

כל קובץ page.tsx הוא עמוד. התיקייה about/ הופכת אוטומטית לנתיב /about. זה פשוט ואלגנטי — ו-AI עובד עם המבנה הזה מעולה.

הבנת מבנה התיקיות הזה חשובה כי כשAI נותן לכם פרויקט Next.js — אתם צריכים לדעת איפה כל דבר נמצא. בפרק 8 נצלול לעומק למבנה פרויקט, אבל עכשיו חשוב להכיר את העיקרון.

דוגמה מעשית: אם AI בנה לכם אתר ואתם רוצים לשנות את עמוד המחירים — אתם יודעים לפתוח את app/pricing/page.tsx. אם אתם רוצים לשנות את ה-header בכל הדפים — פתחו app/layout.tsx. אם רוצים לשנות רק את כרטיס המחיר — חפשו components/PricingCard.tsx. בלי הבנת המבנה הזה, הייתם צריכים לחפש בעיוור בעשרות קבצים.

הנה ההבדל בין React ל-Next.js:

טעות נפוצה: לבלבל בין React ל-Next.js

React = ספרייה (library) שעוסקת בבניית UI — קומפוננטות, props, state.
Next.js = framework שבנוי מעל React ומוסיף routing, SSR, API routes, deployment.
כשמבקשים מ-AI "build a React app" — מקבלים לפעמים React בלבד (בלי routing). רוב הזמן תרצו לבקש "Next.js app".

מסגרת החלטה: React vs Next.js — מה לבקש מ-AI
מה בוניםמה לבקשלמה
Widget / קומפוננטה בודדתReact componentלא צריך framework שלם
עמוד נחיתה (Landing Page)Next.js pageצריך SSR/SSG ל-SEO
אתר עם מספר דפיםNext.js appצריך routing
SaaS / Web AppNext.js full stackצריך API routes + auth
בלוג / Content siteNext.js SSG או Astroביצועים מעולים לתוכן
אפליקציית מוביילReact Nativeאותם concepts, פלטפורמה שונה
עשו עכשיו

גלשו ל-npmtrends.com והשוו next vs remix vs gatsby. שימו לב להבדלים בהורדות. צלמו screenshot ושמרו — זו תמונת המצב של 2026.

זמן: 3 דקות

הסצנה הישראלית

React שולט בשוק ה-Frontend הישראלי. חברות ישראליות מובילות שמשתמשות ב-React:

למה זה חשוב? כי אם תבנו אתר ל-startup ישראלי עם AI — סביר מאוד שהצוות הטכני שלהם כבר עובד עם React. הקוד שAI מייצר מתאים לסביבה הישראלית.

RTL ו-React: אתרים בעברית צריכים תמיכה ב-RTL (Right-to-Left). ספריות כמו shadcn/ui, Radix UI, ו-Tailwind CSS מטפלות ב-RTL כמעט אוטומטית. כשמבקשים מ-AI — הוסיפו "with RTL support for Hebrew" כדי לוודא.

טיפ נוסף לשוק הישראלי: כשבונים אתר בעברית עם AI, ציינו גם "use Heebo or Assistant font for Hebrew text" — אלה הפונטים הכי נפוצים ב-Google Fonts לעברית, והם נראים מקצועי. AI שמבין שהאתר בעברית ייצר גם dir="rtl" אוטומטית אם תבקשו.

למה React כל כך פופולרי בישראל?

ישראל היא אחת המדינות עם הריכוז הגבוה ביותר של חברות React לנפש. הסיבה: כמעט כל סטארטאפ ישראלי שנוסד אחרי 2016 בחר React כ-Frontend stack. הקהילה פעילה — יש meetups, קבוצות Telegram, ובלוגים. כש-AI tools יצאו — הם התאימו בול למה שהשוק הישראלי כבר עובד איתו. זה win-win: אתם בונים עם AI ב-React, והתוצאה מתאימה לכל צוות פיתוח ישראלי.

מתחילים-בינוני תרגול חינמי

מה V0 בונה כשאתה מתאר עמוד — פירוק מעשי

עכשיו שאתם מבינים את המושגים — בואו נפרק פלט אמיתי של V0 ונבין בדיוק מה הוא בנה.

נניח שכתבתם ל-V0: "build a pricing page with 3 tiers: Basic, Pro, Enterprise. Include a monthly/yearly toggle."

הנה מה שV0 ייצר (גרסה פשוטה):

"use client";  // ← רץ בדפדפן (יש interactivity)

import { useState } from "react";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";

const plans = [
  { name: "Basic", monthlyPrice: 29, yearlyPrice: 290, features: ["5 projects", "Basic support"] },
  { name: "Pro", monthlyPrice: 79, yearlyPrice: 790, features: ["Unlimited projects", "Priority support", "Analytics"] },
  { name: "Enterprise", monthlyPrice: 199, yearlyPrice: 1990, features: ["Everything in Pro", "Custom integrations", "Dedicated account manager"] },
];

export default function PricingPage() {
  const [isYearly, setIsYearly] = useState(false); // ← state: חודשי/שנתי

  return (
    <div className="container mx-auto py-16">
      <h1 className="text-4xl font-bold text-center">מחירון</h1>

      {/* Toggle חודשי/שנתי */}
      <div className="flex justify-center gap-4 my-8">
        <span>חודשי</span>
        <button onClick={() => setIsYearly(!isYearly)}>
          {isYearly ? "🔵" : "⚪"}
        </button>
        <span>שנתי (חסכו 20%)</span>
      </div>

      {/* כרטיסי מחירים */}
      <div className="grid grid-cols-3 gap-8">
        {plans.map((plan) => (
          <Card key={plan.name}>
            <h2>{plan.name}</h2>
            <p className="text-3xl font-bold">
              ${isYearly ? plan.yearlyPrice : plan.monthlyPrice}
            </p>
            <ul>
              {plan.features.map((f) => (
                <li key={f}>{f}</li>
              ))}
            </ul>
            <Button>בחרו תוכנית</Button>
          </Card>
        ))}
      </div>
    </div>
  );
}

בואו נפרק:

שורה / בלוקמה הוא עושהמושג
"use client"מסמן שהקומפוננטה רצה בדפדפןClient Component
import { useState }מייבא hook לניהול stateHook
import { Button, Card }מייבא קומפוננטות מ-shadcn/uiComponent library
const plans = [...]מאגר הנתונים — 3 תוכניות מחיריםData
useState(false)state שקובע חודשי/שנתיState
setIsYearly(!isYearly)הופך את המצב בלחיצהState update
plans.map(...)לולאה שיוצרת Card לכל תוכניתList rendering
isYearly ? yearlyPrice : monthlyPriceמציג מחיר לפי המצבConditional rendering

שימו לב: V0 השתמש ב-Button ו-Card מ-shadcn/ui (ספריית קומפוננטות — נלמד בפרק 5). הוא לא בנה כפתור מאפס — הוא השתמש בקומפוננטה מוכנה. זה pattern נפוץ מאוד בפלט AI.

מה לחפש כשקוראים פלט AI

הנה צ'קליסט מהיר לכל פעם שAI מייצר קוד React:

  1. בדקו את השורה הראשונה: יש "use client"? אם כן — הקומפוננטה רצה בדפדפן ויש בה interactivity.
  2. ספרו את ה-imports: כמה ספריות חיצוניות? אם יש @/components/ui/ — זה shadcn/ui.
  3. חפשו useState: כל useState = state אחד. שאלו: מה הוא שומר? מתי הוא משתנה?
  4. מצאו את ה-return: זה ה-UI — מה שיוצג למשתמש. קראו אותו כמו HTML.
  5. חפשו .map(): זה אומר שיש רשימה — קומפוננטה שחוזרת על עצמה (כרטיסים, פריטים).
  6. חפשו תנאים: {x && ...} או {x ? ... : ...} = הצגה מותנית.

עם הזמן, קריאת קוד React תהפוך טבעית. אחרי 5-10 פעמים שתקראו פלט AI — תזהו את ה-patterns מיד. לא צריך לזכור כלום בעל פה — הדפוסים חוזרים על עצמם.

איך לתקן קוד שAI בנה

הכוח האמיתי של הבנת React הוא ביכולת לכוון את ה-AI כשמשהו לא עובד. הנה דוגמאות:

הבעיהמה אתם רואים בקודמה לבקש מ-AI
כפתור לא עושה כלוםאין onClick או אין useState"Add click handler with state to toggle X"
מידע hardcodedטקסט ישירות ב-JSX, בלי props"Extract the title and price into props"
עמוד כבד מדיהכל "use client""Move static parts to Server Components"
קומפוננטה ארוכה מדיפונקציה של 200+ שורות"Split into smaller components: Header, Content, Footer"
אין loading stateuseEffect עם fetch בלי isLoading"Add loading and error states for the data fetch"

שימו לב: כל ה-prompts לתיקון משתמשים במונחי React. זה ההבדל בין Vibe Coder שקרא את הפרק הזה לבין כזה שלא — דיוק בשפה = דיוק בתוצאה.

עשו עכשיו

פתחו את V0 וכתבו: build a pricing page with 3 tiers. קראו את הקוד שנוצר וזהו: (1) שם הקומפוננטה הראשית, (2) כמה useState יש, (3) אילו קומפוננטות מיובאות מ-shadcn/ui.

זמן: 5 דקות

תרגיל 1: פירוק עמוד בית לקומפוננטות

מה תעשו: תפרקו עמוד בית של אתר ישראלי אמיתי לקומפוננטות.

  1. בחרו אתר ישראלי: monday.com, wix.com, fiverr.com, או אחר
  2. צלמו screenshot של עמוד הבית
  3. סמנו על ה-screenshot (בכלי ציור בסיסי) את כל הקומפוננטות — כל אחת בצבע אחר
  4. ציירו component tree — App בראש, קומפוננטות מתחת
  5. לכל קומפוננטה רשמו: שם מוצע (באנגלית), props צפויים, והאם יש state

תוצאה צפויה: מפת קומפוננטות ויזואלית + component tree עם 8-15 קומפוננטות.

זמן משוער: 20 דקות

רמה: מתחילים

תרגיל 2: קריאת קוד React מ-AI — מדריך 5 דקות

מה תעשו: תקראו קוד React שAI ייצר ותתעדו את מה שמבינים.

  1. פתחו V0 או Bolt וכתבו: build a contact form with name, email, message, and submit button with validation
  2. בקוד שנוצר, זהו וסמנו: (1) imports, (2) function components, (3) props, (4) useState, (5) return JSX
  3. לכל useState שמצאתם — כתבו מה הוא שומר ולמה
  4. זהו קומפוננטה אחת שהייתם רוצים לשנות — וכתבו prompt ל-AI שמבקש את השינוי

תוצאה צפויה: קובץ עם פירוק מתועד + prompt לשינוי קומפוננטה.

זמן משוער: 15 דקות

רמה: מתחילים-בינוני

מתחילים תרגול חינמי

10 דברים שאפשר לבקש מ-AI עכשיו שמבינים React

עכשיו שאתם מבינים קומפוננטות, props, state, ו-hooks — הנה 10 דברים מעשיים שאפשר לבקש מ-AI בדיוק יותר:

  1. "Split this page into reusable components" — במקום עמוד ארוך, קומפוננטות נפרדות
  2. "Add state for the mobile menu toggle" — תפריט שנפתח ונסגר
  3. "Make this card component accept props for title, description, and image" — כרטיס גנרי
  4. "Add dark mode toggle with state" — מצב כהה עם useState
  5. "Create a form with validation state for each field" — טופס עם error states
  6. "Add loading state while fetching data" — הצגת spinner בזמן טעינה
  7. "Make this component a Server Component (remove 'use client')" — חיסכון ב-JS
  8. "Add conditional rendering: show X if user is logged in, Y if not" — הצגה מותנית
  9. "Extract the pricing data into props so I can reuse the card" — הפיכת hardcoded ל-props
  10. "Add useEffect to fetch products from /api/products on page load" — טעינת נתונים

שימו לב: כל prompt משתמש במונח React מדויק — component, props, state, useState, useEffect, Server Component. זה ההבדל בין "change the page" לבין הנחיה שAI מבין בדיוק.

לפני ואחרי — ההבדל שהמונחים עושים

בואו נראה את ההבדל בפועל בין prompt "רגיל" לבין prompt "עם מונחי React":

Prompt חלש (לפני הפרק)Prompt חזק (אחרי הפרק)למה החזק עדיף
"Build me a menu""Build a Nav component with mobile menu toggle state (useState for isOpen)"AI יוסיף hamburger icon, responsive behavior, ו-toggle logic
"Change the price""Make the price a prop in the PricingCard component so I can reuse it"AI יפוך את הכרטיס לגנרי במקום לשנות ערך אחד
"Add a dark mode button""Add a ThemeToggle component with useState for isDark, apply dark class to body"AI יבנה קומפוננטה נפרדת עם state שעובד
"Make the page faster""Convert this page to a Server Component (remove 'use client') and keep only the interactive parts as Client Components"AI ידע בדיוק מה לעשות — לא ניחושים

ההבדל מדהים. אותו AI, אותו כלי — אבל prompt שמשתמש במונחי React נותן תוצאה מדויקת בהרבה. זה בדיוק מה שלמדתם בפרק הזה.

טעויות נפוצות ב-prompts ל-React

מניסיון של Vibe Coders ישראלים רבים, הנה הטעויות הנפוצות כשמבקשים מ-AI לבנות React:

  1. "Build a React app" — חסר. AI לא יודע אם רוצים Next.js, Vite, או plain React. עדיף: "Build a Next.js app with App Router".
  2. "Make it interactive" — מעורפל מדי. עדיף: "Add useState for the menu toggle and form validation".
  3. "Add a database" — React הוא frontend. AI יכול לבנות API route ב-Next.js, אבל צריך לציין איזה database (Supabase, Prisma, וכדומה).
  4. "Make it responsive" — טוב, אבל חסר. עדיף: "Make it responsive with Tailwind breakpoints, mobile-first design".
  5. "Copy the design of X" — בעייתי. עדיף: "Build a pricing page with 3-column grid, similar structure to modern SaaS sites".

הכלל: ככל שה-prompt מדויק יותר — התוצאה טובה יותר. והמדויקות באה מהמונחים שלמדתם בפרק הזה. זכרו: AI לא קורא מחשבות — הוא קורא את ה-prompt שלכם. מונח React מדויק שווה עשרות מילים של תיאור מעורפל.

עשו עכשיו

בחרו 2 מתוך הרשימה ונסו אותם עם AI (V0, Claude, או כלי אחר). שמרו את התוצאות בקובץ — זו ההתחלה של "ספריית ה-Prompts" שלכם.

זמן: 5 דקות

תרגיל 3: בניית רשימת Prompts אישית

מה תעשו: תבנו רשימת prompts מותאמת לפרויקט שלכם.

  1. קראו את הרשימה של 10 דברים למעלה
  2. בחרו 3 שרלוונטיים לפרויקט שלכם (או לפרויקט שאתם מתכננים)
  3. נסו כל אחד עם AI — שלחו את ה-prompt וראו את התוצאה
  4. תעדו: מה עבד, מה לא, מה הייתם משנים ב-prompt
  5. הוסיפו 2 prompts משלכם לרשימה — מבוססים על מה שלמדתם בפרק

תוצאה צפויה: רשימת 12 prompts ל-React + תוצאות ולקחים.

זמן משוער: 20 דקות

רמה: מתחילים

תרגיל 4: זיהוי Props ו-State בפרויקט אמיתי

מה תעשו: תנתחו todo app שAI בנה — ותמפו את כל ה-data flow.

  1. פתחו V0 וכתבו: build a todo app with add, complete, and delete functionality
  2. בקוד שנוצר — זהו כל useState: כמה יש? מה כל אחד שומר?
  3. זהו כל props שעוברים בין קומפוננטות
  4. ציירו data flow: מאיפה data מגיע ולאן הוא זורם
  5. בקשו מ-AI: add a filter for completed/active/all tasks. שימו לב — מה state חדש נוסף?

תוצאה צפויה: מיפוי state ו-props של todo app + תיעוד השינוי אחרי הוספת filter.

זמן משוער: 25 דקות

רמה: בינוני

מתחילים שגרה חינמי

שגרת עבודה — React ו-AI ביום-יום

שגרת React ל-Vibe Coders

יומי (5 דקות)

שבועי (15 דקות)

חודשי (30 דקות)

הדבר האחד הכי חשוב

Just One Thing

אם יש דבר אחד שתיקחו מהפרק הזה, הוא: לפני שמבקשים מ-AI לבנות עמוד — פרקו אותו לקומפוננטות בראש. חשבו: מה ה-components? מה ה-props לכל אחד? איפה צריך state? ואז כתבו prompt שמשתמש במונחים האלה. התוצאה תהיה טובה פי 10.

סיכום ביניים: מה למדנו ואיך זה משנה את העבודה עם AI

בואו נעשה חשבון נפש קצר. לפני הפרק הזה, כשביקשתם מ-AI לבנות עמוד — סביר שהשתמשתם במשפטים כמו "build me a website" או "make it look nice". הבעיה: AI לא יודע מה אתם רוצים, ומנחש.

אחרי הפרק הזה, יש לכם 13 מונחים חדשים שמשנים את האופן שבו אתם מדברים עם AI:

זה כמו ללמוד את המילים הנכונות בשפה חדשה. AI יודע את כל המונחים האלה — הוא רק מחכה שתשתמשו בהם.

תבנית Prompt ל-React — העתיקו ושמרו

הנה תבנית prompt שאפשר להשתמש בה בכל פעם שמבקשים מ-AI לבנות משהו ב-React. שמרו אותה בספריית ה-Prompts שלכם:

Build a [component name] component using:
- Framework: Next.js 15 with App Router
- Styling: Tailwind CSS
- UI Library: shadcn/ui
- Language: TypeScript

The component should:
- Accept these props: [list props]
- Have state for: [list what changes]
- Include: [specific features]

Use Server Components by default.
Only add "use client" if the component needs interactivity.
Support RTL for Hebrew content.

מלאו את הסוגריים המרובעים לפי הצורך. ה-template הזה נותן ל-AI את כל המידע שהוא צריך בפורמט שהוא מבין מושלם. זה חוסך שלבי clarification קדימה ואחורה ונותן תוצאה טובה יותר כבר מה-prompt הראשון.

מתחילים סיכום חינמי

סיכום ומעבר לפרק הבא

סיכום פרק 2

בפרק הזה למדנו את React — הספרייה שכמעט כל כלי AI מייצר. הבנו למה React שולט (בסיס קוד ענק, אקוסיסטם עשיר, מודל קומפוננטות), ולמדנו לחשוב בקומפוננטות — לראות כל עמוד כאוסף של חלקים ניתנים לשימוש חוזר.

גילינו מה זה JSX (HTML עם סופר-כוחות), הבנו את ההבדל בין Props (מידע קבוע שזורם מהורה לילד) ל-State (מידע שמשתנה בזמן אמת), והכרנו את ה-Hooks (useState ו-useEffect) שאחראים על interactivity.

ראינו מה React 19 מביא (Server Components, Actions), הכרנו את האקוסיסטם (Next.js שולט), ופירקנו פלט אמיתי של V0 לחלקים שאנחנו מבינים.

הכי חשוב — יש לכם עכשיו שפה מדויקת לדבר עם AI: components, props, state, hooks, Server Components. זה ההבדל בין "build me a page" לבין הנחיה מדויקת שנותנת תוצאה מושלמת.

בדקו את עצמכם
  1. למה רוב כלי ה-AI מייצרים React ולא Vue או Angular? (רמז: 3 סיבות — בסיס קוד, אקוסיסטם, מודל קומפוננטות)
  2. מה ההבדל בין Props ל-State? (רמז: אחד read-only מבחוץ, השני משתנה מבפנים)
  3. מה "use client" עושה בראש קובץ React? (רמז: Server vs Client Components)
  4. מה ההבדל בין React ל-Next.js? מתי לבקש כל אחד? (רמז: ספרייה vs framework)
  5. מה useState(false) עושה ואיך זה משנה את ה-UI? (רמז: יוצר state שמשנה את מה שמוצג כשהוא מתעדכן)

אם נתקעתם — גלילו חזרה לסעיף הרלוונטי. הנקודה היא להבין, לא לזכור.

צ'קליסט — סיכום פרק 2

הצעד הבא: פרק 3

בפרק הבא נכיר את ה-Meta-Frameworks שבנויים מעל React — Next.js, Remix, Astro, ו-SvelteKit. נבין מתי לבקש מ-AI כל אחד, מה ההבדלים ביניהם, ואיך לבחור framework לפי סוג הפרויקט. אם React הוא המנוע — ה-frameworks הם המכונית שלמה. כל מה שלמדתם כאן על קומפוננטות, props, ו-state — ישמש אתכם בכל framework שנלמד.