React: بالنسبة للإدخال المتحكم فيه ، لا تعمل الخطوة كما هو متوقع ما لم تتم تهيئتها باستخدام قيمة فارغة أو "".

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

خلل برمجي

ما هو السلوك الحالي؟
بالنسبة لنوع الإدخال = "رقم" ، لا تعمل الخطوة كما هو متوقع إذا كان هناك مجموعة قيمة أولية. يبدو أن الخطوة يتم تكريمها فقط إذا كانت القيمة الأولية "" أو لاغية.

مثال:
https://codepen.io/anon/pen/MQMBmX

يستخدم المثال قيمة وخطوة ربط إدخال مضبوطة. الخطوة هي 1/10 من القيمة. إذا قمت بتحرير القيمة في مربع النص إلى 50000 وزادت باستخدام السائر ، فسوف تزداد إلى 50100 (أي بالقيمة الأولية وليس بالخطوة الحالية).

قم بتحرير الكود بحيث تكون القيمة الأولية "" أو خالية. قم بتحرير مربع النص إلى 50000 ثم تصعيد - القيمة تذهب إلى 55000 كما هو متوقع.

ما هو السلوك المتوقع؟
يجب أن يكون من الممكن تقديم إدخال رقم يكرم الخطوة دون الحاجة إلى تهيئة قيمة مكون الإدخال إلى قيمة خالية أو "" أولاً.

يبدو أنه عند تقديم قيمة أولية ، فإنه سيكتب سمة قيمة في DOM (على سبيل المثال القيمة = "100"). عندما تكون القيمة الأولية "" أو فارغة ، يتم كتابة سمة القيمة فقط إلى DOM بدون تعيين. على سبيل المثال (القيمة).

ما إصدارات React وأي متصفح / نظام تشغيل متأثر بهذه المشكلة؟

16.3.0-alpha.1 (تم نقله إلى هذا الإصدار للتأكيد إذا كان لا يزال يمثل مشكلة)
0.14.7 (موجود في الأصل في هذا الإصدار)

يبدو أنه يؤثر على Chrome فقط (Windows و mac ، الإصداران 59 و 64). لا يظهر الخطأ في Safari (على جهاز Mac على الأقل).

DOM Bug

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

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

ال 6 كومينتر

أرى سلوكًا خاصًا جدًا مع هذا الكمان في كل من Chrome 64 على Windows 10 و Firefox 52 على دبيان. إذا قمت بكتابة 50000 في الإدخال ثم نقرت على الفور على السهم لأعلى ، فسأحصل على 50100. إذا قمت بكتابة 50000 في الإدخال ، فانقر في مكان آخر في المستند ، ثم انقر فوق السهم لأعلى ، فسأحصل على 55000.

لست بحاجة إلى تغيير القيمة ، انقر فوق السهم لأعلى عدة مرات وسيبدأ في التغيير إلى أرقام لا معنى لها.

شكرا لتقريرandyboyne. تنبع المشكلة من حقيقة أننا لا نقوم بتحديث السمة value على مدخلات الأرقام حتى يتم تعتيم الحقل. نقوم بذلك لتجنب مجموعة من السلوك غير المرغوب فيه المتعلق بالتحقق من صحة المتصفح. ccnhunzaker.

يجب حل ذلك بمجرد أن نتوقف أخيرًا عن مزامنة السمة value للمدخلات الخاضعة للرقابة https://github.com/facebook/react/issues/11896.

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

كما ذكرنا ، إنها مشكلة مزامنة ، تتم مزامنة الحقل عندما يكون الحقل غير واضح.
لذلك أضفت بعض console.log واكتشفت أن e.target.value و e.target.getAttribute ("القيمة") غير متزامنتين بينما الحقل غير واضح.
لذا فإن الحل هو إضافة e.target.setAttribute ("القيمة" ، e.target.value) ؛ لفرض تحديث هذه القيمة ثم تعمل كما هو متوقع.

       onChange={e => {
        console.log("target" , e.target.value);
        console.log("getAttribute value",  e.target.getAttribute("value"));
        e.target.setAttribute("value",e.target.value); 
        this.setState({value: e.target.value, step: e.target.value / 10});
      }}

لا ، لا تزال هذه مشكلة ، إنها تدفعني إلى الجنون ، ما زلنا لم نبسط المدخلات التي يتم التحكم فيها بواسطة الإصدار 16!

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