Vue: يتسبب عرض المكون المحمل غير المتزامن في تغيير الساترات.

تم إنشاؤها على ١٦ سبتمبر ٢٠١٩  ·  4تعليقات  ·  مصدر: vuejs/vue

إصدار

2.6.10

رابط الاستنساخ

https://codesandbox.io/s/vue-template-7hwty

خطوات التكاثر

  1. أنشئ مكونًا بوظيفة تصيير يمكنها عرض مكون آخر بعد مرور الوقت.
  2. يتسبب عرض المكون بعد دقة الوعد / انتهاء المهلة في عرض مرتين وتغيير $attrs إذا كان للمكون الفرعي أي خاصية بمفتاح يساوي attr.
  3. خاصية التعليق في targetComponent وإعادة تحميل الصفحة.
  4. كل Attrs بخير مرة أخرى.

ما هو متوقع؟

يتم استدعاء وظيفة التقديم مرة واحدة ولا يتم تغيير $attrs المكون.

ما الذي يحدث بالفعل؟

يتم استدعاء التقديم مرتين وتتم إزالة attrs الذي يحتوي على مفتاح مثل props للمكون الفرعي.


لقد قمت بإنشاء مكون محمل مخصص لمشروعي والذي يجب أن يتعامل مع تحميل المكونات البطيئة التحميل وأخطاء الشبكة ، لأنني لا أستطيع استخدام https://vuejs.org/v2/guide/components-dynamic-async.html#Handling -Loading -الدولة في حالتي. يمكن التخلص من هذا الخطأ من خلال عدم إضافة المكون الذي تم تنزيله إلى التفاعلية (البيانات الخارجية كمتغير).

bug has workaround

ال 4 كومينتر

يؤدي استخدام نسخة من $attrs : {...this.$attrs} إزالة المشكلة أيضًا

ربما يجب عليك استخدام الدعائم لحل هذه المشكلة :

  render(h) {
    console.log("Attributes of loader:", this.$attrs);
    if (this.targetComponent) {
      return h(this.targetComponent, {
        props: this.$attrs  // Change attrs to props,not `attrs: this.$attrs`
      });
    } else {
      return h("div", "Component is loading");
    }
  }

لأنك تحاول إدخال الدعائم

const targetComponent = {
  props: {
    // COMMENT PROP
    someProp: {
      type: String
    }
  },
  render(h) {
    console.log("Props of target", this.$props); // You can not get $props when render params only has attrs
    return h("div", "WITH PROP:" + this.someProp);
  }
};

يؤدي إنشاء نسخ من Attrs والمرور باستخدام الدعائم إلى حل مشكلتي ، ولكن لا يزال لدي فضول لماذا يتغير المكون الرئيسي $attrs بسبب تقديم الطفل الذي يحتوي على الدعائم بنفس المفتاح؟

يرجع ذلك إلى إعادة تعيين الكائن $attrs . علمت أنني رأيت هذه المشكلة بالفعل في مكان آخر:
نسخة مكررة من https://github.com/vuejs/vue/issues/10115

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات