React: Warnen Sie bei Verwendung überlappender Stile (z. B. border und borderBottom).

Erstellt am 26. März 2016  ·  20Kommentare  ·  Quelle: facebook/react

Dieser "gute erste Fehler" wird von @YongPilMoon übernommen. Arbeiten Sie nicht daran, es sei denn, Sie sind es!

Dies wurde bereits einige Male diskutiert, aber ich glaube nicht, dass es eine Schlussfolgerung gab, und PRs, die das Problem lösen wollten, wurden aus verschiedenen Gründen nicht zusammengeführt.

Ich möchte diese PRs als veraltet schließen und die Diskussion darüber neu starten.
In Anbetracht der Leistung scheint die Schlussfolgerung von @sebmarkbage und @syranide zu sein:

Wir sollten in Betracht ziehen, widersprüchliche Stilregeln überhaupt nicht zuzulassen.

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

IMHO, alles in allem ist es besser, nur Überlappungen zu verbieten und in dev zu warnen.

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

Radium von @ianobermiller kam in https://github.com/FormidableLabs/radium/issues/95 zu dem gleichen Ergebnis, aber danach gab es einige Rückschläge. React Native scheint Stilerweiterungen zuzulassen, jedoch nur für einige Attribute (z. B. margin und padding , aber nicht border ).

Ich schließe alte Pull-Anfragen dazu und erstelle dieses Problem, um die Implementierung des Verhaltens zu verfolgen, über das wir uns einig zu sein scheinen: Wir sollten in __DEV__ warnen, wenn border und borderBottom werden gleichzeitig verwendet. In dieser Ausgabe können wir weitere Einzelheiten besprechen (sollten entweder ignoriert werden? Sollten wir einige Eigenschaften auf der Whitelist zulassen, aber für andere warnen?).

Als Migrationsstrategie können wir Leuten empfehlen, etwas wie https://github.com/ActionIQ/style-builder zu verwenden, wenn sie diese Verknüpfungen wirklich benötigen. Darüber müssen wir uns auch bei der Implementierung des integrierten Stils entscheiden.


Verwandte Themen:

Verwandte PRs:

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

Hilfreichster Kommentar

Was ist mit Situationen, in denen eine Komponente eines Drittanbieters Stile definiert und Überschreibungen zulässt? Angenommen, eine Komponente definiert ihren eigenen border -Stil und ich möchte nur den borderBottom -Stil überschreiben?

Alle 20 Kommentare

@gaearon Danke, dass du das wieder aufgetaucht bist! Verrückt, dass es ein Jahr her ist, seit ich die Radium-Ausgabe eröffnet habe.

Ich mag die Idee, vor Kurzschrift-Eigenschaften wie border warnen, aber nicht vor borderBottom . Es sollte keine Überraschungen geben, wenn Stilobjekte mit den längeren Eigenschaftsnamen zusammengeführt werden.

Frage. Ist die Absicht dieser Ausgabe, nur die Analyse einzelner Stilobjekte zu behandeln, oder besteht auch der Wunsch, mögliche Kollisionen von Eigenschaften, die bedingt angewendet werden, zu analysieren und zu warnen?

Frage. Ist die Absicht dieser Ausgabe, nur die Analyse einzelner Stilobjekte zu behandeln, oder besteht auch der Wunsch, mögliche Kollisionen von Eigenschaften, die bedingt angewendet werden, zu analysieren und zu warnen?

Sie sind sich nicht sicher, ob ich die Frage verstehe. Können Sie das näher erläutern?

Sicher. Wenn es ungültig ist, sowohl border als auch borderColor im selben Element zu haben, ist es sinnvoll, davor zu warnen. Nach meiner Erfahrung ist diese Kombination leicht zu vermeiden, aber es ist schwieriger zu antizipieren und zu debuggen, wenn Stile dynamisch angewendet werden (bedingte Logik basierend auf Requisiten oder Status, Medienabfragen, Radium usw.) oder als Requisiten weitergegeben und zusammengeführt werden mit Objekten niedrigerer Ordnung. Wenn eine Warnung für das Kurzattribut border auftritt, wenn keine anderen Attribute vorhanden sind, die sich auf den betroffenen Rand auswirken könnten, scheint die Warnung eher eine dogmatische Regel als ein hilfreiches Debugging-Tool zu sein, da die Kurzform border ist noch technisch gültig. Wenn sich jedoch in einem separaten Stilobjekt ein Attribut befindet, z. B. das Ändern von borderColor beim Hover, wirkt sich dies auf den betroffenen Rand aus und wird zur Laufzeit auf den Knoten angewendet, der bereits die Kurzform border drauf, ich mag so früh wie möglich zu erfahren , wie das ist , wo die Dinge für mich zu brechen neigen.

Ah, guter Punkt. Ich würde wahrscheinlich nur warnen, wenn wir wissen, dass sich die Stile überschneiden, aber ich bin mir nicht sicher, wie einfach es ist, dies zu erkennen. Ich habe nicht viel darüber nachgedacht und ich habe keine gute Lösung.

@gaearon Eine alternative Lösung, die mir besser gefällt, ist die Verwendung von csstext gemäß https://github.com/facebook/react/issues/5397 , mit der IIRC eine Obermenge dieser Probleme sauber löst.

Was ist mit Situationen, in denen eine Komponente eines Drittanbieters Stile definiert und Überschreibungen zulässt? Angenommen, eine Komponente definiert ihren eigenen border -Stil und ich möchte nur den borderBottom -Stil überschreiben?

Ich habe angefangen, an absolut einfachen Hilfsfunktionen zu arbeiten, um (unter anderem) Kurzschrift-Eigenschaften in Langform umzuwandeln: https://github.com/rtsao/lostyle/tree/master/src ( docs )

Das ist super unvorhersehbar und verwirrend und ich bin gerade darauf gestoßen.

Ich würde vorschlagen, dass wir zumindest vor Updates warnen, wenn wir wissen, dass dies problematisch ist. Wenn wir also von {background: a, backgroundSize: b} zu {background: c, backgroundSize: b} wechseln, warnen Sie, dass backgroundSize überschrieben wird (aber wenn sich backgroundSize gleichzeitig ändert, warnen Sie nicht). Wir können dies für alle Eigenschaftskürzel tun und anhand der Reihenfolge der Eigenschaftsaufzählung feststellen, ob dies problematisch ist.

Kennzeichnung als "gute erste Ausgabe". Fügen wir hierzu eine Nur-DEV-Warnung gemäß meinem obigen Kommentar hinzu. Ich denke, ein guter Ort, um mit den Ermittlungen zu beginnen, wäre hier:

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

Wenn Sie dies übernehmen möchten, kommentieren Sie dies bitte hier, damit nicht zwei Personen daran arbeiten.

@sophiebits , ich freue mich daran zu arbeiten :)

@supertinou Es gehört dir!

Schlagen Sie dies einfach und war in der Tat überrascht und verwirrt.

@supertinou Ich wollte nur überprüfen, ob ich Ihnen dabei helfen kann.

@sophiebits Hallo, ich möchte niemandem auf die Zehen treten: D, aber ich habe mir dieses Problem angesehen, es repliziert und würde es gerne ausprobieren, aber ich weiß nicht, ob

Ich habe einen Codepen erstellt, um zu rekapitulieren / zu erklären, was auf https://codepen.io/giuseppegurgone/pen/mjKbmq?editors=0010 @gaearon / @sophiebits los ist.

@mirkojotic Immer noch interessiert?

Wenn es niemanden gibt, würde ich diesen gerne nehmen :)

Alles klar @YongPilMoon , es gehört dir.

Hier einen Hinweis hinzufügen: Das Entfernen einer Eigenschaft kann diesen Fehler ebenfalls auslösen. https://stackoverflow.com/q/52636618/49485

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen