EduFlow

الوحدة 3 · الـ Components والأنظمة

الـ Components والـ Instances

16 دقراءة 4 داختر بحكمة

الدرس في لمحة

حوّل صف العادة وزر التعليم المتكرّرين في Steady إلى main components، وضع منهما instances، وطبّق overrides على ما يُسمح بتغييره في كل استخدام، وأبقِ التغييرات تتدفّق من مصدر واحد.

  1. 1الـ Main components والـ Instances
  2. 2الـ Overrides: ما يُسمح للـ instance بتغييره
  3. 3ابنِ الصغير ثم ضعه داخل الكبير
  4. 4الفصل (Detach): مخرج الطوارئ

لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.

بنهاية القسم 2 صار صف العادة موجودًا في شاشة Today، ومرّتين في Habit detail (“Similar habits”)، ومرة في نتيجة بحث. ثم يتغيّر المطلوب: الصفوف تحتاج نصف قطر زوايا 16 px بدل 12. تجد ثلاث نسخ من الأربع. أما الرابعة فتُطلق بنصف القطر القديم، وينشر مستخدم دقيق الملاحظة لقطة شاشة.

الـ components موجودة لكي يعيش القرار التصميمي في مكان واحد.

الـ Main components والـ Instances

حدّد frame صف العادة واضغط Cmd+Option+K (Ctrl+Alt+K على Windows)، أو استخدم زر إنشاء الـ component في شريط الأدوات. يصبح الـ frame ‏main component، ويظهر بأيقونة component في لوحة الطبقات. إنه مصدر الحقيقة. انقله إلى صفحة Kit التي أنشأتها في الدرس 1.1، فلا تحتوي الشاشات إلا استخداماته.

كل نسخة تضعها من الآن فصاعدًا هي instance: نسخة مرتبطة. اسحب واحدة من لوحة Assets، أو انسخ الـ main component والصقه. غيّر الـ main component فتتحدّث كل الـ instances، فورًا في هذا الملف، وفي الملفات الأخرى بعد أن تنشره كمكتبة (الدرس 3.5).

الـ main component ‏Habit row في صفحة Kit يرسل التحديثات إلى ثلاث instances في شاشات مختلفة. كل instance تعرض الـ override الخاص بها: اسم عادة مختلف، وstreak مخفي، وأيقونة مستبدلة. Habit row main component ‏(Kit) Instance: Today النص: Drink water Instance: Detail الـ streak مخفي Instance: Search أيقونة مستبدلة نصف قطر الزوايا والـ padding والبنية ما زالت تأتي من الـ main component
main component واحد يغذّي كل الـ instances؛ والـ overrides تُطبَّق فوقه

الـ Overrides: ما يُسمح للـ instance بتغييره

الـ instances ليست مجمّدة. يمكنك تطبيق override على المحتوى والمظهر في أي instance: تغيير النص (“Read 20 pages” إلى “Drink water”)، أو تغيير تعبئة، أو إخفاء طبقة، أو استبدال instance متداخلة بـ component آخر. هذه تعديلات يومية ولا تكسر الرابط.

ما لا يمكنك تغييره في الـ instance هو بنيتها. لا يمكنك إضافة طبقة، ولا حذف واحدة، ولا إعادة ترتيب الأبناء؛ يمكنك فقط إخفاء ما هو موجود. (الاستثناء الوحيد هو الـ slot، أي منطقة يعلّمها صانع الـ component كمساحة مفتوحة لمحتوى حرّ، وستتعرّف إليها في الدرس التالي.) هذا الحدّ مقصود. البنية مهمّة الـ component، ولو استطاعت كل instance أن تعيد ترتيب نفسها، لما بقي هناك component.

للـ overrides قاعدة مهمّة واحدة: الخاصية التي طُبّق عليها override تتوقّف عن اتّباع الـ main component. إذا غيّرت لون الـ streak في صف واحد إلى الأحمر من أجل نموذج “streak at risk”، ثم تغيّر لاحقًا لون الـ streak في الـ main component، فسيحتفظ ذلك الصف بلونه الأحمر. يحتفظ Figma بالـ override لأنه يفترض أنك قصدته. ولإعادة خاصية إلى الاتّساق، استخدم reset overrides من خيارات الـ instance في الشريط الجانبي الأيمن.

ابنِ الصغير ثم ضعه داخل الكبير

انظر إلى صف العادة واعثر على القطع التي تظهر في أماكن أخرى. زر التعليم يظهر أيضًا في Habit detail. وأيقونة العادة، وهي مربّع بزوايا مستديرة فيه رمز، تظهر في منتقي الأيقونات في لوحة New habit. اصنع هذه الـ components أولًا، ثم استخدم instances منها داخل الـ component ‏Habit row:

Text
Kit page
├─ Check button          main component
├─ Habit icon            main component
└─ Habit row             main component
   ├─ Habit icon         instance
   ├─ Text stack         frame
   │  ├─ Habit name      text
   │  └─ Streak          text
   └─ Check button       instance

الآن أي إصلاح لزر التعليم، مثل حلقة تركيز أوضح، يصل إلى كل صف عادة في كل شاشة وإلى الزر المستقل في Habit detail. ويبقى كل مستوى صغيرًا بما يكفي لفهمه.

سمِّ الـ components كما سمّيت الطبقات: حسب الدور. يجمّع Figma الـ components في لوحة Assets حسب الأسماء المفصولة بشرطة مائلة، فيظهر Controls/Check button وControls/Chip معًا تحت Controls. أبقِ البنية ضحلة؛ مستويان يكفيان عادةً لمجموعة بهذا الحجم.

الفصل (Detach): مخرج الطوارئ

يمكنك فصل instance ‏(Cmd+Option+B / Ctrl+Alt+B)، فتتحوّل إلى frame عادي بلا رابط. أحيانًا يكون هذا صحيحًا: رسم تسويقي يستعير مظهر صف، أو استكشاف لمرة واحدة في صفحة Scratch. أما في شاشة منتج، فالـ instance المفصولة خطأ مؤجّل. سيفوتها كل إصلاح، ولن يتذكّر أحد وجودها حتى ينشر مستخدم لقطة شاشة.

صار صفّك component واحدًا بـ instances مرتبطة. لكن Steady يحتاج الصف بعدّة حالات: غير معلَّم، ومعلَّم، وفائت بالأمس. صنع component منفصل لكل حالة سيعيد مشكلة النسخ من جديد. الـ Variants والـ Component properties تحلّ ذلك في الدرس التالي.

أهم النقاط

  • الـ main component هو المصدر؛ والـ instances نسخ مرتبطة به تتحدّث حين يتغيّر.
  • يمكن للـ instances أن تطبّق overrides على المحتوى والمظهر، مثل النص والتعبئة والظهور والـ instances المتداخلة، لكن لا على بنية طبقاتها.
  • الخاصية التي طُبّق عليها override تتوقّف عن تلقّي التحديثات لتلك الخاصية وحدها، لذا طبّق أقل قدر ممكن من الـ overrides.
  • ابنِ الـ components الصغيرة أولًا وضعها داخل بعضها، فيصل إصلاح زر التعليم إلى كل صف يحتويه.
  • فصل الـ instance ‏(detach) يقطعها عن الإصلاحات المستقبلية؛ اعتبره حلًّا أخيرًا، وغالبًا علامة على أن الـ component يحتاج خيارًا جديدًا.

قراءات إضافية

تحقّق من فهمك

3 أسئلة

السؤال 1 من 3

تغيّر نصف قطر الزوايا في الـ main component ‏Habit row من 12 إلى 16. أيّ الصفوف تتحدّث؟

السؤال 2 من 3

يحتاج مصمّم أن يعرض صف عادة واحد سطر نص إضافيًا للـ “note”، ففصل الـ instance وأضاف النص. ما الخطوة الأفضل على المدى البعيد؟

السؤال 3 من 3

لماذا تبني زر التعليم كـ component مستقل وتضعه داخل الـ component ‏Habit row؟

تدريب

اختر بحكمة

ماذا تستطيع الـ instance أن تفعل دون فصل؟

تملأ شاشة Habit detail بـ instances من الـ component ‏Habit row (يحتوي على instance من Habit icon، وكومة نصوص فيها Habit name وStreak، وinstance من Check button). لا يحتوي الـ component على slots. اختر كل تعديل يمكنك إجراؤه على instance مع إبقائها مرتبطة بالـ main component.

ماذا تستطيع الـ instance أن تفعل دون فصل؟