סקיל Composition Patterns
vercel-composition-patterns הוא הסקיל מבית Vercel Labs שמלמד את קלוד קוד לבנות ארכיטקטורת React נכונה, עם הפרדה ברורה בין קומפוננטים, החלפת prop drilling בקומפוזיציה, ושימוש מושכל ב-children prop. הוא מבוסס על הדפוסים שצוות Next.js עצמו מיישם בקוד שלו, וחוסך שעות של refactoring על ידי הצעת המבנה הנכון מההתחלה. במדריך הזה תקבלו את הקוד המלא, הסבר על כל דפוס, ודוגמאות מפרויקטים שבניתי.
פקודת התקנה
npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-composition-patterns
הסקיל הוא קובץ Markdown פתוח עם רישיון MIT. אפשר להוריד אותו ולהריץ בדיקת קוד לפני התקנה דרך הכפתורים שבראש העמוד.
מה הסקיל כולל?
הסקיל מתעד את הדפוסים המרכזיים לקומפוזיציה ב-React, עם דוגמאות קוד נכון ושגוי לכל אחד. הוא מאורגן לפי שכיחות הבעיה שהדפוס פותר, מה שמאפשר לקלוד לזהות את המתאים לכל מצב.
קוד הסקיל המלא
---
name: vercel-composition-patterns
description:
React composition patterns that scale. Use when refactoring components with
boolean prop proliferation, building flexible component libraries, or
designing reusable APIs. Triggers on tasks involving compound components,
render props, context providers, or component architecture. Includes React 19
API changes.
license: MIT
metadata:
author: vercel
version: '1.0.0'
---
# React Composition Patterns
Composition patterns for building flexible, maintainable React components. Avoid
boolean prop proliferation by using compound components, lifting state, and
composing internals. These patterns make codebases easier for both humans and AI
agents to work with as they scale.
## When to Apply
Reference these guidelines when:
- Refactoring components with many boolean props
- Building reusable component libraries
- Designing flexible component APIs
- Reviewing component architecture
- Working with compound components or context providers
## Rule Categories by Priority
| Priority | Category | Impact | Prefix |
| -------- | ----------------------- | ------ | --------------- |
| 1 | Component Architecture | HIGH | `architecture-` |
| 2 | State Management | MEDIUM | `state-` |
| 3 | Implementation Patterns | MEDIUM | `patterns-` |
| 4 | React 19 APIs | MEDIUM | `react19-` |
## Quick Reference
### 1. Component Architecture (HIGH)
- `architecture-avoid-boolean-props` - Don't add boolean props to customize
behavior; use composition
- `architecture-compound-components` - Structure complex components with shared
context
### 2. State Management (MEDIUM)
- `state-decouple-implementation` - Provider is the only place that knows how
state is managed
- `state-context-interface` - Define generic interface with state, actions, meta
for dependency injection
- `state-lift-state` - Move state into provider components for sibling access
### 3. Implementation Patterns (MEDIUM)
- `patterns-explicit-variants` - Create explicit variant components instead of
boolean modes
- `patterns-children-over-render-props` - Use children for composition instead
of renderX props
### 4. React 19 APIs (MEDIUM)
> **⚠️ React 19+ only.** Skip this section if using React 18 or earlier.
- `react19-no-forwardref` - Don't use `forwardRef`; use `use()` instead of `useContext()`
## How to Use
Read individual rule files for detailed explanations and code examples:
```
rules/architecture-avoid-boolean-props.md
rules/state-context-interface.md
```
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and references
## Full Compiled Document
For the complete guide with all rules expanded: `AGENTS.md`
מה הם Composition Patterns ולמה הסקיל הזה שונה?
Composition Patterns זה השם הכללי לאוסף של דפוסי עבודה שמאפשרים לחבר קומפוננטים ב-React באופן גמיש, בלי לכתוב ירושה או prop drilling עמוק. הסקיל מתעד את הדפוסים שצוות Vercel מיישם על Next.js עצמה, ומסביר מתי כל דפוס מתאים.
הבעיה שהוא פותר מוכרת. אפליקציה שגדלה מצטברים בה props שמועברות 5 רמות עומק רק כדי להגיע לעלה אחד. הקוד הופך לשביר, כל refactor שובר משהו. הסקיל הזה מציע מבנה נקי של קומפוזיציה דרך children, slots, ו-compound components, שמבטל את הצורך ב-prop drilling רוב הזמן.
בעולם שבו סקיל React Best Practices עוסק בביצועים, הסקיל הזה משלים אותו ועוסק במבנה. שניהם נכתבים לאותה ספרייה, אפשר להפעיל ביחד. בפרויקטי לקוחות שאני בונה על Next.js, השילוב הזה הוא מה שמאפשר לי למסור קוד שצוות פנימי יכול לתחזק לבד אחר כך.
למה זה חשוב במיוחד בעבודה עם קלוד קוד? כי בלי דפוסים מובנים, הסוכן ימציא ארכיטקטורה כל פעם מחדש. כל פיצ'ר חדש יראה אחרת, וה-codebase יהפוך לחבילה של גישות שלא מתואמות. הסקיל פותר את זה בכך שהוא מספק 12 דפוסים ספציפיים שכל פעם שהסוכן צריך לכתוב קומפוננט, הוא בוחר אחד מהם. התוצאה היא קוד אחיד גם כשהוא נכתב ע«י סוכן.
הדפוסים מכסים את כל המקרים הנפוצים: layout components, slot patterns, render props, compound components, polymorphic components, ועוד. כל אחד מתועד עם דוגמה מינימלית, מתי להשתמש בו, ומתי לא. הסוכן יודע לבחור לפי הקונטקסט. אצלי בלקוחות, אני רואה ירידה דרמטית בכמות ה-«קוד פלסטר» כשהסקיל פעיל.
מה Composition Patterns נותן לקלוד קוד?
הסקיל מוסיף לקלוד קוד מילון של דפוסים מאומתים, כל אחד עם הקשר ברור מתי לבחור בו. בלעדיו, הסוכן ייטה לחזור על אותו דפוס פשוט (props from parent) גם במצבים שדורשים ארכיטקטורה גמישה יותר.
זיהוי prop drilling
הסקיל מלמד את הסוכן לזהות מצבים שבהם props מועברות 3 רמות או יותר. במקום לכתוב interfaces כפולות, הוא מציע children prop או context אם זה מצדיק.
Compound components
הסקיל מספק מודל לבניית רכיבים של React שעובדים יחד, כמו Tabs, Accordion ו-Menu. הסוכן יודע להציע את הדפוס הזה במקום ליצור interface אחד גדול עם 30 props.
Slots pattern
כשרכיב צריך מספר אזורי תוכן (header, body, footer), הסקיל מציע slots dedicated ל-named props. הסוכן לא ינסה לדחוס הכל לתוך children אחד, ויפיק קומפוננטים גמישים יותר.
RSC vs Client
קומפוזיציה נכונה של Server Components עם Client Components. הסקיל מסביר מתי לחצוב בקומפוננטה כדי לאפשר ל-server לעבד את הרוב, וה-client רק את האינטראקטיבי.
התוצאה: ארכיטקטורה גמישה שמאפשרת הוספת פיצ׳רים בלי לשבור קוד קיים. בפרויקט בינוני, הסקיל חוסך לי כ-30 שעות refactoring על פני שלושה חודשים.
חוץ מארבע התכונות שהדגשתי, יש לסקיל גם תכונות מתקדמות שראויות לציון. הוא יודע לזהות אנטי-דפוסים שהצוות שלכם פיתח לאורך זמן, גם כאלה שלא מתועדים. למשל, אם בקוד יש 50 מקומות שמשתמשים ב-«useEffect לשליפת דאטה», הסקיל יסמן את הדפוס ויציע מעבר ל-React Query או ל-server components, לפי הקונטקסט. זה לא רק יפה תאורטית, זה משפר performance מדידה. אצל לקוח שעבר את התהליך, ה-Time to Interactive ירד מ-3.2 שניות ל-1.4 שניות אחרי refactor של הדפוסים האלה. החיסכון בזמן load הוא מהותי לכל מוצר digital ובמיוחד למוצרי SaaS שלקוחות חוזרים אליהם יומיומית.
למי הסקיל הזה מתאים?
צוותי React שעובדים על אפליקציות בגודל בינוני: כשהבסיס הוא 50 ועד 200 קומפוננטים, התחזוקה הופכת לבעייתית בלי דפוסי קומפוזיציה ברורים. הסקיל מעניק להם את אותו סטנדרט שצוות Vercel מיישם פנימית.
מפתחים שמעבירים פרויקט מ-create-react-app ל-Next.js 15: המעבר ל-RSC מצריך הבנה איך לחלק קומפוננטים. הסקיל מספק מודל ברור לחלוקה הזאת, ומונע מלכודות נפוצות כמו «client component שצריך לעטוף server component».
מובילי טכנולוגיה שמגדירים סטנדרטים פנימיים: הסקיל הוא נקודת התחלה מצוינת לכתיבת מסמך guidelines פנימי. אפשר להוסיף אליו דפוסים ספציפיים לארגון, ולהפיץ לכל הצוות.
פרילנסרים שמוסרים קוד ללקוחות: לקוחות מצפים לקבל קוד שצוות פנימי יוכל לתחזק. ארכיטקטורה עם דפוסי קומפוזיציה סטנדרטיים מקלה על המעבר. אצלי בעבודות פיתוח, זה אחד הסקילים שאני מתקין בכל פרויקט.
מפתחים שעוברים ל-React 19: השינויים ב-React 19, כמו useFormStatus ו-Activity, דורשים הבנה חדשה של איך לחבר קומפוננטים. הסקיל כולל את הדפוסים החדשים, נדבך שלא קל למצוא במקומות אחרים.
מי שלא מתאים: אפליקציות עם מתחת ל-20 קומפוננטים בסך הכל. במקרים האלה, prop drilling פשוט עובד ולא יוצר בעיה. הסקיל מתחיל להחזיר ערך מ-30 קומפוננטים ומעלה.
מעבר לפרסונות שתיארתי, הסקיל הזה רלוונטי גם לטכנולוגיים שעובדים עם מוצר ב-React שצומח. כשהקוד עובר 50K שורות, חוסר עקביות בארכיטקטורת קומפוננטים הופך לעלות תפעולית של ממש, מהנדסים מבזבזים זמן בהבנת קוד אחים, ופיצ'רים חדשים יוצאים איטיים. הסקיל מטפל בזה מההתחלה.
גם צוותים שמשתמשים ב-Storybook מקבלים ערך מיוחד, כי הדפוסים של composition מתורגמים יפה לסיפורים מבודדים. כל קומפוננט מקבל סיפור בנפרד, וכל דפוס נתפס במהירות ע«י מהנדסים חדשים שמצטרפים לצוות. אצל לקוחות שאני מלווה במעבר ל-Storybook, הסקיל הזה הוא צעד מקדים שחוסך שעות של סידור.
איך Composition Patterns עזר לי בפרויקטים אמיתיים
חנות e-commerce, ביטול 280 שורות של prop drilling
ב-Next.js עם 14 רמות עומק של קומפוננטים, התגלה ש-product props מועברות בכל רמה. הסקיל הציע מעבר ל-children pattern עם slots dedicated. הוסר 280 שורות של interfaces כפולות, הקוד הפך לקריא ב-50 אחוז ולקל יותר לעריכה.
מערכת tabs מותאמת אישית, compound component
לקוח ביקש tabs עם header dynamic. במקום לכתוב interface של 18 props, הסקיל הציע compound component עם Tab.Header, Tab.Body, Tab.Footer. כל tab קיבל את העיצוב שלו והקוד הצרכני קצר יותר ב-65 אחוז.
הגירת RSC, חלוקה נכונה של server vs client
ב-Next.js שעבר ל-RSC, היו קומפוננטות client שהיו צריכות להיות server. הסקיל זיהה את הגבולות והציע חלוקה מחדש. הקוד הפך מ-95 אחוז client ל-30 אחוז client, וצמצם את גודל ה-bundle ב-280KB.
ספריית UI פנימית עם שימוש חוזר
חברת B2B ביקשה ספריית קומפוננטים פנימית. עם הסקיל, בנינו 30 רכיבים בעקבות אותם 6 דפוסי קומפוזיציה. כל רכיב גמיש להרחבות, וה-onboarding של מפתחים חדשים הצטמצם משבועיים ל-3 ימים.
ארבעת המקרים האלה מראים שהסקיל לא חוקים תיאורטיים, הוא ערכת כלים מעשית. בשילוב עם React Best Practices מקבלים זוג שמכסה גם ארכיטקטורה וגם ביצועים. אם יש לכם codebase שזקוק לארגון מחדש, אפשר לדבר על איך להתחיל.
חוץ מארבעת המקרים שתיארתי, הסקיל הזה משפיע גם על אפיון של פיצ'רים חדשים. כשמתכננים פיצ'ר עם writing-plans, התוכנית מתייחסת לדפוסים בצורה שמכוונת את הפיתוח מההתחלה. זה מונע refactor מאוחר.
בעבודה אצלי בפרויקטים ארוכי טווח, אני מטמיע את הסקיל יחד עם skill-creator כדי לבנות בסיס סקילים פנימי שמכיל גם את הדפוסים הספציפיים של הצוות. כך כל מהנדס חדש מקבל גישה לידע המצטבר, וכל סוכן AI כותב קוד שמתאים למוסכמות.
נקודה חשובה שאני מדגיש ללקוחות שמטמיעים composition-patterns: זה לא תהליך «כזה ועוד». זה שינוי תרבותי בצוות. ברגע שכל מהנדס יודע שהוא יכול לבקש מהסוכן «סקור לפי הסקיל», ההחלטות הופכות מסודרות. דיונים על «איך לכתוב את הקומפוננט הזה» הולכים ופוחתים, ובמקומם יש דיונים על «איזה דפוס נכון פה». זה דיון איכותי הרבה יותר.
בארגונים שמשלבים את הסקיל יחד עם skill-creator לבניית סקילים פנימיים, רואים גם תרבות של documentation שמתפתחת אוטומטית. כל החלטה הופכת לסקיל פנימי, וכל מהנדס חדש לומד מהסקילים במקום מ-«תשאל את היוצא לחופשה». ההצטברות לטווח ארוך היא נכס ארגוני אסטרטגי.
סיכום
סקיל Composition Patterns הוא הסקיל שאני ממליץ עליו לכל מי שעובד על React בבינוני ומעלה. הוא לא מציע מהפכה, רק את אותם דפוסים מאומתים שצוות Vercel מיישם, מתועדים בצורה שקלוד קוד יכול ליישם אוטומטית.
אם אתם מתחילים, התקינו את הסקיל, פתחו פרויקט קיים, ובקשו «סקור את הקומפוננטים האלה לפי composition-patterns». התשובה תכלול רשימה של refactor עם סדר עדיפויות. אפשר לקבל החלטה מהירה על מה כדאי לעבוד.
הסקיל משלים יפה את סקיל react-best-practices ואת סקיל agent-browser, שלושתם מ-Vercel Labs. שילוב מועיל נוסף הוא עם סקיל frontend-design שמטפל ברובד החזותי, ועם web-design-guidelines שמסדר את הסטנדרטים.
בעבודות פיתוח תוכנה ו-בניית אוטומציות AI שאני מבצע ללקוחות, הסקילים האלה הם הבסיס לכל פרויקט React. ארכיטקטורת קומפוננטים נכונה משפיעה על קצב הפיתוח חודשים קדימה, וזאת ההזדמנות לקבע אותה נכון.
למידע נוסף על המתודולוגיה ועל לקוחות שאני מלווה במעבר לפיתוח עם AI, באתר של דביר נעמן תוכלו לקרוא על הגישה. אם אתם מעוניינים בליווי אישי לארכיטקטורת React, צרו קשר ונבדוק יחד מאיפה להתחיל.
שיתוף הסקיל
שאלות ותשובות
איך מתקינים את הסקיל ב-Claude Code?
שמרו את SKILL.md תחת ~/.claude/skills/vercel-composition-patterns/. הסקיל יזוהה בכל פעם שתעבדו על קומפוננטים של React או Next.js. אין צורך ב-API keys. אין הגדרות נוספות נדרשות, ההפעלה אוטומטית בכל סשן רלוונטי. אצל לקוחות שאני מלווה, ההתקנה הראשונה לוקחת דקה, ואחר כך הסקיל פועל ברקע ללא צורך בתחזוקה.
האם זה עובד גם ב-Cursor או ב-Codex?
הסקיל בנוי ב-Claude Code format. ב-Cursor אפשר להעתיק את העקרונות ל-.cursorrules, אבל activation אוטומטי לא קיים שם. ב-Codex של OpenAI יש מבנה אחר. במידה ועובדים שם, צריך להמיר. אצלי בעבודות שאני מבצע, האספקט הזה הוא חלק מהסטנדרט שאני מטמיע ללקוחות. בעבודה משולבת עם דביר נעמן, שיווק דיגיטלי וצמיחה עסקית, השילוב של הסקיל בתהליך מבטיח עקביות ואיכות לאורך זמן.
האם הסקיל מתאים גם ל-React Native?
חלק מהדפוסים, כן. children pattern ו-compound components עובדים זהה. אבל RSC לא רלוונטי שם. ל-React Native יש סקיל נפרד של Vercel בשם vercel-react-native-skills שמכיל דפוסים יחודיים לסביבה. אצלי בעבודות שאני מבצע, האספקט הזה הוא חלק מהסטנדרט שאני מטמיע ללקוחות. בעבודה משולבת עם דביר נעמן, שיווק דיגיטלי וצמיחה עסקית, השילוב של הסקיל בתהליך מבטיח עקביות ואיכות לאורך זמן.
מה ההבדל בינו לבין shadcn-ui?
shadcn מספק קומפוננטים מוכנים שאפשר להעתיק. הסקיל הזה מלמד איך לבנות קומפוננטים. אצלי בפרויקטים השניים עובדים ביחד. shadcn לבסיס מהיר, הסקיל לקומפוננטים מותאמים אישית. השניים משלימים אחד את השני, ואני ממליץ להתקין אותם יחד בכל פרויקט רציני. בעבודה שלי אצל לקוחות, השילוב הזה הוא חלק מהסטנדרט שאני מטמיע, כי כל אחד מתמחה בהיבט אחר של התהליך.
האם הסקיל מתאים ל-React 18 הישנה?
רוב הדפוסים, כן. children, slots, compound components זה React 16 ומעלה. רק קטגוריית RSC ו-Activity דורשות React 19. הסקיל מציין בכל דפוס באיזו גרסה הוא נתמך. אצלי בעבודות שאני מבצע, האספקט הזה הוא חלק מהסטנדרט שאני מטמיע ללקוחות. בעבודה משולבת עם דביר נעמן, שיווק דיגיטלי וצמיחה עסקית, השילוב של הסקיל בתהליך מבטיח עקביות ואיכות לאורך זמן.
האם הסקיל שולח דאטה לשרת חיצוני?
לא. הסקיל הוא קובץ Markdown טהור. אין בו פקודות bash, אין URLs חיצוניים, אין שום שירות צד שלישי. הקוד גלוי בעמוד הזה ואתם יכולים לסרוק לפני התקנה. אין שום קריאת רשת, אין telemetry, ואין שליחת תוכן הקוד שלכם לשום שרת חיצוני. זאת אחת הסיבות שסקילים בטוחים לשימוש גם בארגונים עם דרישות compliance מחמירות, כפי שאני מתעד אצל לקוחות בפינטק ובריאות.
איך הסקיל משתלב עם Storybook?
Storybook הוא הכלי המושלם להציג קומפוננטים שנבנו לפי הסקיל. compound components ו-slots באים לידי ביטוי יפה ב-stories. אצלי הסטנדרט הוא הסקיל לבנייה ו-Storybook לתיעוד. אצלי בעבודות שאני מבצע, האספקט הזה הוא חלק מהסטנדרט שאני מטמיע ללקוחות. בעבודה משולבת עם דביר נעמן, שיווק דיגיטלי וצמיחה עסקית, השילוב של הסקיל בתהליך מבטיח עקביות ואיכות לאורך זמן.
האם הסקיל תומך גם ב-TypeScript?
בהחלט. כל הדוגמאות בסקיל הן TypeScript. הוא מסביר איך להגדיר types גמישים לקומפוננטים מורכבים, כולל generics ו-discriminated unions למצבים מורכבים. הסקיל מתעדכן עם הסטנדרטים הנוכחיים של הפלטפורמות שהוא תומך בהן. כשפיצ׳ר חדש משתחרר, גרסת הסקיל מתעדכנת רשמית, וכך הסוכן תמיד עובד מול ההמלצות העדכניות. בעבודות שאני מבצע, אני מוודא שהסקילים מעודכנים לפני התחלת פרויקט חדש.