أهلا،
ربما أسيء فهم شيء ما ولكن لسبب ما عندما أستخدم ref
بهذا الشكل
<Document
file={file}
onLoadSuccess={this.onDocumentLoadSuccess}
ref={node => console.log(node)}
>
....
أرى ثلاث مرات التالية الإخراج:
حسنًا ، أريد استخدام ref
لاكتشاف المكان الذي تم عرضه فيه على الصفحة (offsetTop ، offsetLeft ، إلخ) ولا توجد طريقة أخرى للحصول عليه باستثناء استخدام ref
، لذا سؤالي هو لا بأس أنه يستدعي ثلاث مرات؟
في المثال الحقيقي الخاص بي ، أقوم بتحميل الملف من جانب العميل ، ولكن لا يزال لدي نفس المشكلة :(
ملاحظة: الرمز مأخوذ من مجلد sample
في المستودع الخاص بك
مرحبًا 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 الوارد.