React: Advertir cuando se utilizan estilos superpuestos (por ejemplo, border y borderBottom)

Creado en 26 mar. 2016  ·  20Comentarios  ·  Fuente: facebook/react

Este "buen primer error" lo ha tomado @YongPilMoon. ¡No trabajes en él a menos que seas tú!

Esto se ha discutido varias veces antes, pero no creo que haya ninguna conclusión, y los RP que intentan resolver el problema no se fusionaron por varias razones.

Me gustaría cerrar esos RP por obsoletos y reiniciar la discusión sobre esto.
Considerado el rendimiento, la conclusión de @sebmarkbage y @syranide parece ser:

Deberíamos considerar no permitir reglas de estilo en conflicto en absoluto.

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

En mi humilde opinión, considerando todo, es mejor no permitir la superposición y advertir en dev.

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

Radium de @ianobermiller llegó a la misma conclusión en https://github.com/FormidableLabs/radium/issues/95, pero luego hubo una reacción violenta. React Native parece permitir expansiones de estilo, pero solo para algunos atributos (por ejemplo, margin y padding , pero no border ).

Estoy cerrando las solicitudes de extracción antiguas sobre esto y creando este problema para rastrear la implementación del comportamiento en el que parecemos estar de acuerdo: deberíamos advertir en __DEV__ cuando border y borderBottom se utilizan al mismo tiempo. Podemos discutir más detalles (¿deberían ignorarse? ¿Deberíamos permitir algunas propiedades en la lista blanca pero advertir sobre otras?) En este número.

Como estrategia de migración, podemos sugerir a las personas que utilicen algo como https://github.com/ActionIQ/style-builder si realmente necesitan esos atajos. También es algo sobre lo que tendremos que decidir al implementar el estilo integrado.


Asuntos relacionados:

Relaciones públicas relacionadas:

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

Comentario más útil

¿Qué ocurre con las situaciones en las que un componente de terceros define estilos y permite anulaciones? Digamos que un componente define su propio estilo border y yo quiero simplemente anular el estilo borderBottom .

Todos 20 comentarios

@gaearon ¡ Gracias por resurgir esto! Es una locura que haya pasado un año desde que abrí la edición de Radium.

Me gusta la idea de advertir sobre propiedades abreviadas como border , pero no borderBottom . No debería haber sorpresas al fusionar objetos de estilo utilizando los nombres de propiedad más largos.

Pregunta. ¿La intención de este número es abordar solo el análisis de objetos de estilo individuales o también existe el deseo de analizar y advertir sobre posibles colisiones de propiedades que se aplican condicionalmente?

Pregunta. ¿La intención de este número es abordar solo el análisis de objetos de estilo individuales o también existe el deseo de analizar y advertir sobre posibles colisiones de propiedades que se aplican condicionalmente?

No estoy seguro de entender la pregunta, ¿puede darnos más detalles?

Por supuesto. Si no es válido tener border y borderColor en el mismo elemento, entonces tiene sentido advertir sobre esto. En mi experiencia, esta combinación es fácil de evitar, pero es más difícil de anticipar y depurar cuando los estilos se aplican dinámicamente (lógica condicional basada en accesorios o estado, consultas de medios, Radium, etc.) o se transmiten como accesorios y se fusionan con objetos de estilo de orden inferior. Si aparece una advertencia para el atributo abreviado border cuando no hay otros atributos que puedan afectar el borde involucrado, entonces la advertencia parece más una regla dogmática que una útil herramienta de depuración, ya que la abreviatura border es sigue siendo técnicamente válido. Sin embargo, si hay un atributo en un objeto de estilo separado, como cambiar borderColor al pasar el mouse, por ejemplo, eso afectaría el borde involucrado y se aplicará en tiempo de ejecución al nodo que ya tiene la abreviatura border , me gustaría que me avisen lo antes posible, ya que aquí es donde las cosas tienden a romperse para mí.

Ah, buen punto. Probablemente solo advertiría si sabemos que los estilos se superponen, pero no estoy seguro de lo fácil que es decirlo. No lo he pensado mucho y no tengo una buena solución.

@gaearon Una solución alternativa que me gusta más es usar csstext según https://github.com/facebook/react/issues/5397 , que IIRC resuelve limpiamente un superconjunto de estos problemas.

¿Qué ocurre con las situaciones en las que un componente de terceros define estilos y permite anulaciones? Digamos que un componente define su propio estilo border y yo quiero simplemente anular el estilo borderBottom .

Empecé a trabajar en funciones auxiliares muy simples para convertir propiedades abreviadas a formato largo (entre otras cosas): https://github.com/rtsao/lostyle/tree/master/src ( docs )

Esto es súper impredecible y confuso y me encontré con esto.

Sugeriría que al menos avisemos sobre las actualizaciones cuando sepamos que es problemático. Es decir, si vamos de {background: a, backgroundSize: b} a {background: c, backgroundSize: b}, advertimos que backgroundSize está siendo anulado (pero si backgroundSize cambia al mismo tiempo, no avise). Podemos hacer esto para todas las propiedades abreviadas y saber si es problemático a partir del orden de enumeración de propiedades.

Marcando como "buen primer número". Agreguemos una advertencia solo para DEV para esto según mi comentario anterior. Creo que un buen lugar para comenzar a investigar sería aquí:

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

Si desea abordar esto, comente aquí para que no tengamos dos personas trabajando en esto.

@sophiebits , estoy feliz de trabajar en este :)

@supertinou ¡ Es tuyo!

Simplemente golpeó esto y de hecho me sorprendió y confundió.

@supertinou Solo quería comprobar si hay algo en lo que pueda ayudarte con esto.

@sophiebits Hola, no quiero pisar los dedos de los pies de nadie: D, pero he echado un vistazo a este problema, lo he replicado y me encantaría intentarlo , pero no sé si

Hice un codepen para recapitular / explicar lo que está pasando https://codepen.io/giuseppegurgone/pen/mjKbmq?editors=0010 @gaearon / @sophiebits, avíseme si olvidé algo.

@mirkojotic ¿ Todavía

Si no hay nadie, me gustaría tomar este :)

Está bien @YongPilMoon , es tuyo.

Agregar una nota aquí: eliminar una propiedad también puede desencadenar este error. https://stackoverflow.com/q/52636618/49485

La advertencia está disponible en 16.13.
https://reactjs.org/blog/2020/03/02/react-v16.13.0.html

¿Fue útil esta página
0 / 5 - 0 calificaciones