محتويات الدورة

Angular / الأساسي / الدرس 3

الإشارات والحالة المشتقة

نمذج الحالة القابلة للكتابة ومشتقاتها الخالصة بالإشارات مع إظهار التعديل والمساواة وأعمار الآثار.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • قراءة الإشارات وضبطها وتحديثها.
  • استخدام computed للاشتقاق بدل آثار المزامنة.
  • شرح مساواة المراجع وقراءة الإشارة في القالب.

الإشارة قيمة متتبعة تُقرأ عبر دالة

تنشئ signal قيمة تفاعلية قابلة للكتابة، وتقرأها بدعوتها وتستبدلها set وتحسب update بديلًا من السابق. لا تجعل الغلاف الكائن ثابتًا عميقًا. تشتق computed من القراءات وتكون مقروءة فقط، ويتتبع Angular ما قُرئ فعلًا فتتغير اعتماديات الشرط. أبقِ الاشتقاق خالصًا واضحًا. لا تفحص الإشارة الخارج أو تمنح إذنًا أو تحفظ القيمة بعد إعادة التطبيق.

فحص الاشتقاق بتنفيذ الإشارات الفعلي

يستورد البرنامج Angular core المثبتة دون مكوّن أو متصفح أو سياق حقن. تكون computed كسولة ومحفوظة فتشتق عند القراءة وتعيد استعمال الناتج حتى تغير الاعتماد. العلاقة ضعف عد صغير؛ تنقل update المصدر من اثنين لخمسة فتنتج القراءة التالية عشرة. يثبت الاختبار حساب الإشارة لا جدولة DOM أو كشف المكوّن. اذكر الحد؛ فالعرض يحتاج تجربته.

typescript حساب إشارات مكتمل من Angular core
import { signal, computed } from "@angular/core";
const count = signal(2);
const doubled = computed(() => count() * 2);
console.log(doubled());
count.update(value => value + 3);
console.log(doubled());
الناتج المتوقع
4
10

تطبع القراءتان أربعة وعشرة، ويُختبر الرسم المحلي فقط دون إقلاع تطبيق أو متصفح.

قراءة الدالة عند عرض الإشارة

يقرأ المكوّن count() وdoubled()؛ فالاسم دون الدعوة يشير للدالة لا القيمة. يتتبع Angular قراءة القالب حتى مع OnPush ليحدد تحديث العرض. يعدل النقر المصدر مرة ولا يحتاج المشتق حقلًا مكتوبًا ثانيًا. يحتاج المقطع مضيفًا مقلعًا، فتُوصف القيم ولا تُنسب لاختبار متصفح. ويتجنب آثارًا تحتاج سياقًا ودورة حياة.

typescript قراءات إشارة سياقية وتحديث مصدر واحد
import { Component, computed, signal } from "@angular/core";
@Component({
  selector: "app-signal-counter", standalone: true,
  template: `<button type="button" (click)="count.update(increment)">Increase</button>
             <p>{{ count() }} / {{ doubled() }}</p>`
})
export class SignalCounter {
  readonly count = signal(2);
  readonly doubled = computed(() => this.count() * 2);
  readonly increment = (value: number) => value + 1;
}

يعرض المكوّن الصحيح أولًا 2 / 4 ثم 3 / 6 بعد نقرة. لا ينتج البرنامج المحلي هذه الملاحظات في DOM.

استبدال الكائن المتغير بدل تعديله بصمت

تستخدم المساواة الافتراضية مقارنة تراعي المرجع، فقد لا يبلغ تعديل مصفوفة وضبط المرجع نفسه المستهلكين. أعد مصفوفة أو كائنًا جديدًا. تفضل computed عادة على نسخ المشتق بأثر. تناسب الآثار دمج الأنظمة الأمرية ولها متطلبات سياق وتنظيف لاحقًا. قد تمنع المساواة المخصصة تحديثًا؛ فلا تستخدمها إلا بقاعدة مكافأة مختبرة توافق الملاحظات.

اختبار المصدر والمشتق والعرض مستقلين

اختبر البداية والتحديث والاعتماد الشرطي واستبدال المصفوفة ببيانات صغيرة. يثبت اختبار الإشارة الاشتقاق لا لوحة المفاتيح أو العرض أو الاستمرار. افحص النص بعد التفاعل والتزامن في المكوّن. تجنب أثرًا يكتب لاعتماده ويولد حلقة أو ترتيبًا غامضًا. احفظ قواعد المجال وفحص الخادم. يمنح الرسم الواضح كل حقيقة مصدرًا واحدًا ويظهر مشتقاتها بدل نسخ متناثرة.

الأخطاء الشائعة وإصلاحها

يعرض القالب دالة الإشارة بدل قيمتها.

لماذا يحدث؟
لم تُدعَ دالة القراءة.
كيف تصلحه؟
اقرأ count() بالقالب.
كيف تتجنب تكراره؟
ميّز الغلاف من قيمته الحالية.

تعديل مصفوفة موضعي لا يحدث العرض المشتق.

لماذا يحدث؟
احتفظ التحديث بمرجع تعتبره المساواة مماثلًا.
كيف تصلحه؟
استبدل القيمة عبر set أو update.
كيف تتجنب تكراره؟
اختبر الهوية مع الحالة المتوقعة.

استخدام أثر لمزامنة حقلين مشتقين.

لماذا يحدث؟
نُمذج اعتماد خالص كنسخ أمري.
كيف تصلحه؟
استخدم computed للاشتقاق.
كيف تتجنب تكراره؟
اجعل لكل حقيقة مصدرًا واحدًا.

اختبر فهمك

1. أضف count.set(0) وحدّد المصدر والمشتق ولماذا لا يلزم أثر للصفر.

اعرض الحل المشروح

يقرأ المصدر صفرًا والمشتق صفرًا. تعبر computed عن الضرب فلا يلزم أثر أو حقل ثانٍ قد ينحرف. أضف تأكيد القراءة محليًا وفحص نص مستقلًا إذا وجب عرضه.

2. تحوي إشارة [1, 2] ويلحق الزر 3. صف تحديث الاستبدال وخاصية الاختبار.

اعرض الحل المشروح

أعد [...values, 3] من update بدل push وإعادة الأصل. افحص [1, 2, 3] واختلاف المرجع، وافحص منع التكرار إن لزم منفصلًا؛ فالاستبدال لا يفرض صلاحية العمل وحده.

أهم ما تعلمته

  • اقرأ الإشارات بدوالها.
  • اشتق بـcomputed واستبدل الكائن المتغير.
  • افصل دليل التفاعل المحلي من العرض.

المراجع الرسمية