Angular / دليل حلول تحريري

إصلاح العرض القديم بعد تعديل كائن الإشارة

ميّز تعديل القيمة من إشعار الإشارة واستبدل الحالة باتساق وافحص الاشتقاق قبل لوم OnPush أو كشف يدوي.

وقت القراءة التقريبي: 2 دقيقةتاريخ مراجعة المحتوى

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

تحوي إشارة مصفوفة بيانات جديدة ويبقى عدد أو مجموع computed قديمًا. قد تنعش نقرة بعيدة جزءًا وتترك آخر متناقضًا. قد تُلام OnPush بينما لم يبطل تحديث المصدر الرسم التفاعلي.

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

افهم الأسباب المحتملة

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

تحديد التعديل الذي يتجاوز الاستبدال

يعدل المقتطف المصفوفة ويعيد مرجعها نفسه. وُسم غير قابل للتشغيل لتوضيح السياسة الخاطئة لا حلًا. تتبع كل كاتب والأسماء المشتركة بالردود والخدمات. قد تقرأ فعالية أخرى طولًا جديدًا ويبقى المجموع محفوظًا فيبدو العيب متقطعًا.

typescript نمط تعديل موضعي سياقي غير مناسب
items.update(current => {
  current.push(3);
  return current;
});

يفترض إشارة مصفوفة معدلة وقد لا يبلغ إعادة المرجع المستهلك، ولا يُنسب ناتج نجاح للمقطع.

استبدال المتغير وحفظ الاشتقاق الخالص

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

typescript تصحيح مكتمل لاستبدال قيمة الإشارة
import { computed, signal } from "@angular/core";
const items = signal<readonly number[]>([1, 2]);
const total = computed(() => items().reduce((sum, value) => sum + value, 0));
console.log(total());
const before = items();
items.update(current => [...current, 3]);
console.log(total(), before === items());
الناتج المتوقع
3
6 false

السطران 3 و6 false؛ يعاد حساب المجموع ويختلف مرجع المصفوفة.

مراجعة المساواة والملكية وقراءة القالب

افحص دعوة القالب للدالة ووصول التحديث للمخزن الصحيح وعدم نسخة ثانية بمزود فرعي. راجع المساواة وفق الحقول المستخدمة. حلل HTTP وطبّق انتقالًا موثقًا بدل كشف كل إشارة. لـOnPush مسارات إشعار مدعومة وليست سببًا لنثر detectChanges.

تحقق من نجاح الإصلاح

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

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

امنع تكرار المشكلة

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

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