React: تحذير عند استخدام الأنماط المتداخلة (على سبيل المثال ، الحدود والحدود السفلية)

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

تم التقاط هذا "الخطأ الأول الجيد" بواسطةYongPilMoon. لا تعمل على ذلك إلا إذا كنت أنت!

تمت مناقشة هذا عدة مرات من قبل ولكن لا أعتقد أنه كان هناك أي استنتاج ، ولم يتم دمج الممثلين العامين الذين يعتزمون حل المشكلة لأسباب مختلفة.

أود إغلاق تلك العلاقات العامة باعتبارها قديمة ، وإعادة تشغيل المناقشة حول هذا الموضوع.
نظرًا للأداء ، يبدو أن النتيجة من sebmarkbage و syranide هي:

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

- https://github.com/facebook/react/pull/2013#issuecomment -57338177

IMHO ، كل الأشياء تعتبر أنه من الأفضل فقط عدم السماح بالتداخل والتحذير في dev.

- https://github.com/facebook/react/pull/4661#issuecomment -132996649

وصل Radium بواسطة ianobermiller إلى نفس النتيجة في https://github.com/FormidableLabs/radium/issues/95 ولكن كان هناك بعض رد الفعل العنيف بعد ذلك. يبدو أن React Native يسمح بتوسيعات النمط ولكن فقط لعدد قليل من السمات (مثل margin و padding ، لكن ليس border ).

أقوم بإغلاق طلبات السحب القديمة حول هذا الأمر ، وإنشاء هذه المشكلة لتتبع تنفيذ السلوك الذي يبدو أننا نتفق عليه: يجب أن نحذر في __DEV__ عندما border و borderBottom تستخدم في نفس الوقت. يمكننا مناقشة المزيد من التفاصيل (هل يجب تجاهلها؟ هل يجب أن نسمح ببعض الخصائص المدرجة في القائمة البيضاء ولكن نحذر للآخرين؟) في هذه المشكلة.

كإستراتيجية ترحيل ، يمكننا أن نقترح على الأشخاص استخدام شيء مثل https://github.com/ActionIQ/style-builder إذا كانوا بحاجة فعلاً إلى تلك الاختصارات. إنه أيضًا شيء نحتاج إلى اتخاذ قرار بشأنه عند تنفيذ التصميم المتكامل.


القضايا ذات الصلة:

العلاقات العامة ذات الصلة:

  • # 2013
  • # 4661
DOM HTML Bug good first issue (taken)

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

ماذا عن المواقف التي يحدد فيها مكون الجهة الخارجية الأنماط ويسمح بالتجاوزات؟ لنفترض أن أحد المكونات يحدد نمط border وأريد فقط تجاوز النمط borderBottom ؟

ال 20 كومينتر

gaearon شكرا لك على الظهور هذا! من الجنون أنه قد مر عام منذ أن فتحت إصدار Radium.

تعجبني فكرة التحذير حول خصائص الاختزال مثل border ، لكن ليس borderBottom . لا ينبغي أن يكون هناك أي مفاجآت عند دمج كائنات النمط باستخدام أسماء الخصائص الأطول.

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

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

لست متأكدًا من فهمي للسؤال ، هل يمكنك التوضيح؟

بالتأكيد. إذا كان وجود كل من border و borderColor على نفس العنصر غير صالح ، فمن المنطقي التحذير من هذا الأمر. من واقع خبرتي ، من السهل تجنب هذا المزيج ، ولكن من الصعب توقعه وتصحيحه عندما يتم تطبيق الأنماط ديناميكيًا (المنطق الشرطي المستند إلى الدعائم أو الحالة ، واستعلامات الوسائط ، و Radium ، وما إلى ذلك) أو يتم تمريرها كدعامات ودمج مع كائنات نمط ذات ترتيب أقل. إذا حدث تحذير للسمة المختصرة border عندما لا توجد سمات أخرى قد تؤثر على الحدود المعنية ، فإن التحذير يبدو كقاعدة عقائدية أكثر من كونه أداة تصحيح أخطاء مفيدة نظرًا لأن الاختزال border هو لا يزال ساريًا من الناحية الفنية. ومع ذلك ، إذا كانت هناك سمة في كائن نمط منفصل - مثل تغيير borderColor عند التمرير على سبيل المثال - فسيؤثر ذلك على الحد المتضمن وسيتم تطبيقه في وقت التشغيل على العقدة التي تحتوي بالفعل على اختصار border على ذلك، أود أن حذر من أن يكون في أقرب وقت ممكن لأن هذا هو المكان الذي تميل الأشياء لكسر بالنسبة لي.

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

gaearon أحد الحلول البديلة التي أفضلها هو استخدام csstext وفقًا لـ https://github.com/facebook/react/issues/5397 ، والذي يحل IIRC مجموعة شاملة من هذه المشكلات.

ماذا عن المواقف التي يحدد فيها مكون الجهة الخارجية الأنماط ويسمح بالتجاوزات؟ لنفترض أن أحد المكونات يحدد نمط border وأريد فقط تجاوز النمط borderBottom ؟

لقد بدأت العمل على وظائف المساعد الميتة البسيطة لتحويل خصائص الاختزال إلى صيغة طويلة (من بين أشياء أخرى): https://github.com/rtsao/lostyle/tree/master/src ( مستندات )

هذا أمر غير متوقع ومربك للغاية وقد واجهت هذا للتو.

أقترح أن نحذر على الأقل من التحديثات عندما نعرف أنها مشكلة؟ أي ، إذا انتقلنا من {background: a، backgroundSize: b} إلى {background: c، backgroundSize: b} ، حذر من تجاوز backgroundSize (ولكن إذا تغيرت backgroundSize في نفس الوقت ، فلا تحذر). يمكننا القيام بذلك لجميع اختصارات الممتلكات ومعرفة ما إذا كانت مشكلة من ترتيب تعداد الممتلكات.

وضع علامة "قضية أولى جيدة". دعنا نضيف تحذير DEV-only لهذا في تعليقي أعلاه. أعتقد أن المكان المناسب لبدء التحقيق سيكون هنا:

https://github.com/facebook/react/blob/v16.4.0/packages/react-dom/src/client/ReactDOMFiberComponent.js#L619

إذا كنت ترغب في القيام بذلك ، يرجى التعليق هنا حتى لا يعمل شخصان على ذلك.

sophiebits ، يسعدني العمل على هذا :)

supertinou لك!

فقط اضغط على هذا وفوجئت حقًا بالارتباك.

supertinou أردت فقط التحقق مما إذا كان هناك أي شيء يمكنني مساعدتك به في هذا الشأن.

sophiebits مرحبًا ، لا أريد أن أخطو على أصابع أي شخص: D ولكني ألقيت نظرة على هذه المشكلة ، وكررها وأحب أن أتناولها ولكني لا أعرف ما إذا كان

لقد تقدمت codepen إلى خلاصة / شرح ما يجري https://codepen.io/giuseppegurgone/pen/mjKbmq؟editors=0010 gaearon /sophiebits اسمحوا لي أن أعرف إذا كنت قد نسيت شيئا.

mirkojotic هل ما زلت مهتمًا؟

إذا لم يكن هناك أحد ، أود أن آخذ هذا :)

حسنًا YongPilMoon ، إنه ملكك.

إضافة ملاحظة هنا: يمكن أن تؤدي إزالة الخاصية أيضًا إلى حدوث هذا الخطأ. https://stackoverflow.com/q/52636618/49485

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