React: تحديد متعدد - لا ينتقل إلى العنصر المحدد (العناصر)

تم إنشاؤها على ١٧ يوليو ٢٠١٨  ·  12تعليقات  ·  مصدر: facebook/react

خلل برمجي
في رد فعل @ 15 يمكننا تعيين "القيمة" أو "القيمة الافتراضية" ، وتمرير العنصر المحدد إلى العرض.
https://codesandbox.io/s/6vx637r10n

لكن في رد فعل @ 16 هذا لا يعمل.
https://codesandbox.io/s/7jqqz3zmo1

DOM Bug good first issue (taken)

التعليق الأكثر فائدة

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

ال 12 كومينتر

مثيرة للاهتمام! أتساءل عما إذا كان هناك تغيير في كيفية تخصيص العنصر المحدد في React 16.0.

حاولت إلقاء نظرة على هذه الملفات:

- https://github.com/facebook/react/blob/v15.6.2/src/renderers/dom/client/wrappers/ReactDOMSelect.js

- https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOMFiberSelect.js

للأسف لم أتمكن من العثور على هذا الاختلاف الكبير. (آسف لقلة المساعدة ولكني مهتم بمعرفة كيف سيتم حل ذلك أو إذا كنت أبحث في المكان الخطأ).

لا داعى للقلق! هذه هي الأماكن الأولى التي سأبحث فيها أيضًا. أحد الاختلافات التي أراها هو أن React 16.x يعين defaultSelected بعد selected :

https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOMFiberSelect.js#L95

أتساءل عما إذا كان هذا يؤدي إلى التخلص من React. لست قادرًا على الاختبار في الوقت الحالي بنفسي ، لكنني أتساءل عما إذا كنت سترى تغييرًا في التمرير إذا قمت بتعيين نقطة توقف وخطوت عبر هذه الحلقة.

مرحبًا ناثان ، لقد كنت أستكشف هذه المشكلة منذ بضع ساعات ، لقد قمت بتثبيت رد الفعل 15.6.2 و 16.3.2 ، وتمكنت من متابعة تنفيذ البرنامج ببعض نقاط التوقف ، ويبدو أن الوظيفة:

updateOptions

سيعيّن إحدى سمات الخيار الخاصة به مع تحديد "تحديد" إلى صحيح (جيد) تم تحديد الفهرس على 4 (جيد أيضًا) ، ولكن من هنا لا يمكنني معرفة سبب عدم طباعة العنصر بالطريقة التي ينبغي ، لأن معلماته يبدو أنه بخير. كما أنني لم أجد فرقًا بين تعيين defaultSelected قبل selected .

عندما قمت بتشغيل هذا من خلال مصحح الأخطاء ، تم تعيين كل من selected و defaultSelected (بناءً على ما تستخدمه) بشكل صحيح كسمات true على عنصر <option> DOM المناسب .

في المثال 16.3.2 ، لا يزال يحدد القيمة التي تم تمريرها ، ولكنه لا يقوم بالتمرير إليها. هل سيكون هناك مكان آخر للبحث فيه في العارض حيث يتم تقييم / فحص سمة القيمة ويتغير السلوك هناك؟ لقد نقرت ولكن هناك الكثير من التعليمات البرمجية التي يجب تحليلها.

لست متأكدًا من مدى فائدة ذلك ، لكنني أجريت اختبارًا صغيرًا باستخدام الرابط @ kre0n المزود للعثور على

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

لقد وجدت أن التحديد توقف عن التمرير إلى "القيمة" المقدمة لعنصر التحديد في الإصدار 16.0.0-alpha.3 .

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

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

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

آسف. لقد كنت أقوم بالكثير من السفر :) يبدو أن هذه مشكلة صعبة حقًا.

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

أشعر بالفضول إذا كان هناك شيء ما يحدث للتحديد في وقت مبكر قد يتسبب في توقف التمرير. أتساءل عما إذا كان هناك ترتيب لتعيينات الخاصية / السمات التي كان من الممكن أن تتغير والتي من شأنها أن تؤدي إلى إيقاف التمرير.

هذه ظاهرة مثيرة للاهتمام ، دعنا نقول أن الخطوات التالية حدثت:

https://codepen.io/nhunzaker/pen/vaZxvE

  1. 6 خيارات
  2. حدد الخيار الأول
  3. حدد الخيار السادس
  4. قمت بإلغاء تحديد الخيار الأول

لا يزال التمرير يركز على الخيار الأول ، على الرغم من أن الخيار السادس هو الخيار الوحيد المحدد.

يبدو أنه ، على أي حال ، يقوم Chrome بالتمرير إلى القيمة الأولى المحددة فقط عند _assigned_ ، وليس _ unassigned.

ربما هذا مرتبط.

nhunzaker نعم ، شكرًا ، أنت تفكر في الاتجاه الصحيح. يقوم المتصفح بالتمرير إلى الخيار الأول الذي جعل الخاصية المحددة صحيحة. أي تغييرات أخرى لا تسبب التمرير.

لذا ، ما اكتشفته الآن. تقوم React بإنشاء عقدة selest وتضيف الخيارات إليها. نظرًا لأن select لديه multipe=false ، فإن الخيار الأول المُلحق يحصل تلقائيًا على selected=true . لذا ، فإن التبديل الإضافي إلى الوضع المتعدد وتحديث الخيارات لا يؤدي إلى التمرير.

أعتقد أنه من الضروري تعيين قيمة السمة multiple قبل إلحاق الخيارات.

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