React-pdf: رد فعل المرجع = {} مكالمات ثلاث مرات ، عمليات رد النداء المخصصة ليست مفيدة بدرجة كافية

تم إنشاؤها على ٢٣ يناير ٢٠١٨  ·  4تعليقات  ·  مصدر: wojtekmaj/react-pdf

أهلا،

ربما أسيء فهم شيء ما ولكن لسبب ما عندما أستخدم ref بهذا الشكل

<Document
  file={file}
  onLoadSuccess={this.onDocumentLoadSuccess}
  ref={node => console.log(node)}
>
....

أرى ثلاث مرات التالية الإخراج:

screenshot 2018-01-23 17 13 23

حسنًا ، أريد استخدام ref لاكتشاف المكان الذي تم عرضه فيه على الصفحة (offsetTop ، offsetLeft ، إلخ) ولا توجد طريقة أخرى للحصول عليه باستثناء استخدام ref ، لذا سؤالي هو لا بأس أنه يستدعي ثلاث مرات؟

في المثال الحقيقي الخاص بي ، أقوم بتحميل الملف من جانب العميل ، ولكن لا يزال لدي نفس المشكلة :(

ملاحظة: الرمز مأخوذ من مجلد sample في المستودع الخاص بك

enhancement question

ال 4 كومينتر

مرحبًا nnnikolay ،
نعم ، هذا سلوك طبيعي تمامًا لأي مكون (ضع في اعتبارك - مكونًا وليس عنصرًا) تحديثات React.

علاوة على ذلك ، إنها لفكرة سيئة للغاية التحقق مما إذا كانت الصفحة قد تم عرضها باستخدام مرجع مكون Document .

الطريقة الوحيدة التي يمكنني أن أوصي بها هي إعادة الاتصال onRenderSuccess prop الموجود في Page المكون الذي تريد الاستماع إليه للحصول على عرض ناجح.

يمكنك أيضًا القيام بذلك عن طريق إرفاق inputRef prop بمكون Page ، والذي سيمرر الدالة ref إلى عنصر div الأساسي الذي يتم تقديمه بواسطة Page المكوّن. ومع ذلك ، لا يُنصح بهذه الطريقة لأنه بدءًا من 3.0.0 ، سيظهر Page root div في وقت أبكر من ذي قبل للسماح بتصميم أسهل أثناء تحميل / عرض الصفحة.

شكرًا wojtekmaj على الرد وللأفكار ، أولاً وقبل كل شيء ، حيث أرى أن onRenderSuccess لا يأخذ أي حجة لذلك ليس من الواضح كيف يمكنني في رد الاتصال هذا اكتشاف Page DOM موضع العقدة على الصفحة ، يسعدني سماع نصيحتك في ذلك.

ومع ذلك ، فإن inputRef مناسب بالنسبة لي ، لأنني أريد فقط معرفة مكان ظهور <div> (الإحداثيات العلوية واليسرى) على الصفحة.

اه صحيح. يجب أن يعطي onRenderSuccess بالفعل مزيدًا من المعلومات حول ما يقدمه.

حاليًا ، يمكنك إجراء حل بديل (رمز مبسط لسهولة القراءة):

const pageNumber = 1;

return (
  <Document>
    <Page
      pageNumber={pageNumber}
      onRenderSuccess={() => doSomething(pageNumber)}
    />
  </Document>
);

لكنني أوافق تمامًا على ذلك. التحسينات على وظائف رد الاتصال على قائمتي لـ 3.0! :)

تم دمج التحسينات للتو وستكون متاحة أولاً في الإصدار v3.0.0-alpha.3 الوارد.

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