Soy consciente de que puede especificar estilos dentro de las clases React, como este:
var MyDiv = React.createClass({
render: function() {
var style = {
color: 'white',
fontSize: 200
};
return <div style={style}> Have a good and productive day! </div>;
}
});
¿Debería apuntar a hacer todo el estilo de esta manera y no tener estilos especificados en mi archivo CSS?
¿O debería evitar los estilos en línea por completo?
Parece extraño y desordenado hacer un poco de ambos: dos lugares tendrían que verificarse al ajustar el estilo.
css
reactjs
inline-styles
react-jsx
eye_mew
fuente
fuente
Respuestas:
Todavía no hay muchas "Mejores prácticas". Aquellos de nosotros que estamos usando estilos en línea, para componentes React, todavía estamos experimentando mucho.
Hay varios enfoques que varían enormemente: Reaccione la tabla de comparación de lib en línea
¿Todo o nada?
Lo que llamamos "estilo" en realidad incluye algunos conceptos:
Comience con estilos de estado
React ya está administrando el estado de sus componentes, esto hace que los estilos de estado y comportamiento un ajuste natural para la colocación con la lógica de sus componentes.
En lugar de crear componentes para renderizar con clases de estado condicionales, considere agregar estilos de estado directamente:
Tenga en cuenta que estamos usando una clase para diseñar la apariencia, pero ya no usamos ninguna
.is-
clase prefijada para estado y el comportamiento .Podemos usar
Object.assign
(ES6) o_.extend
(subrayado / lodash) para agregar soporte para múltiples estados:Personalización y reutilización
Ahora que lo estamos usando
Object.assign
se vuelve muy simple hacer que nuestro componente sea reutilizable con diferentes estilos. Si queremos anular los estilos por defecto, podemos hacerlo en la llamada in situ con los apoyos, así:<TodoItem dueStyle={ fontWeight: "bold" } />
. Implementado así:Diseño
Personalmente, no veo una razón convincente para los estilos de diseño en línea. Hay una serie de excelentes sistemas de diseño CSS por ahí. Solo usaría uno.
Dicho esto, no agregue estilos de diseño directamente a su componente. Envuelva sus componentes con componentes de diseño. Aquí hay un ejemplo.
Para el soporte de diseño, a menudo trato de diseñar componentes para ser
100%
width
yheight
.Apariencia
Esta es el área más polémica del debate del "estilo en línea". En última instancia, depende del componente que diseñe y la comodidad de su equipo con JavaScript.
Una cosa es segura, necesitará la ayuda de una biblioteca. Estados del navegador (
:hover
,:focus
) y las consultas de medios son dolorosos en React sin procesar.Me gusta el radio porque la sintaxis de esas partes duras está diseñada para modelar la de SASS.
Organización del código
A menudo verá un objeto de estilo fuera del módulo. Para un componente de lista de tareas, podría verse así:
funciones getter
Agregar un montón de lógica de estilo a su plantilla puede ser un poco complicado (como se ve arriba). Me gusta crear funciones getter para calcular estilos:
Mirando más
Discutí todo esto con más detalle en React Europe a principios de este año: Estilos en línea y cuándo es mejor 'usar CSS' .
Estoy feliz de ayudarlo mientras hace nuevos descubrimientos en el camino :) Dame un golpe -> @chantastic
fuente
div
,span
,a
, etc que ayudará a mantener el estilo aislado independientemente de la biblioteca que utiliza. componente reactpatterns.com/#StyleEl atributo de estilo en React espera que el valor sea un objeto, es decir, un par de valores clave.
style = {}
tendrá otro objeto dentro{float:'right'}
para que funcione.Espero que esto resuelva el problema
fuente
style
accesorio que podría conducir a problemas de rendimiento. Por lo menos, defina un estilo constante como este fuera de surender
. ¡Espero que esto ayude!Uso estilos en línea ampliamente dentro de mis componentes React. Me resulta mucho más claro colocar estilos dentro de los componentes porque siempre está claro qué estilos tiene y no tiene el componente. Además, tener todo el poder de Javascript a mano realmente simplifica las necesidades de diseño más complejas.
Al principio no estaba convencido, pero después de incursionar en ello durante varios meses, estoy completamente convertido y estoy en proceso de convertir todo mi CSS a métodos CSS en línea u otros métodos CSS.
Esta presentación del empleado de Facebook y colaborador de React "vjeux" también es realmente útil: https://speakerdeck.com/vjeux/react-css-in-js
fuente
CSS Modules
,styled-components
y otros.El propósito principal del atributo de estilo es para estilos dinámicos basados en estado. Por ejemplo, podría tener un estilo de ancho en una barra de progreso basado en algún estado, o la posición o visibilidad basada en otra cosa.
Los estilos en JS imponen la limitación de que la aplicación no puede proporcionar un estilo personalizado para un componente reutilizable. Esto es perfectamente aceptable en las situaciones mencionadas anteriormente, pero no cuando cambia las características visibles, especialmente el color.
fuente
<div><a>foo <b>bar</b></a><table>...</table></div>
¿cómo lo diseña desde los accesorios? Tenga en cuenta que la estructura html debe seguir siendo un detalle de implementación, de lo contrario, perderá muchos de los componentes de beneficios que brindan.James K Nelson, en su carta "Por qué no debe aplicar estilo a los componentes de reacción con JavaScript", afirma que en realidad no es necesario utilizar estilos en línea con sus desventajas. Su afirmación es que el viejo y aburrido CSS con menos / scss es la mejor solución. La parte de sus tesis a favor de css:
fuente
El estilo en JSX es muy similar al estilo en HTML.
Caso HTML:
Caso JSX:
fuente
Lo que hago es dar a cada uno de mis componentes reutilizables un nombre de elemento personalizado único y luego crear un archivo CSS para ese componente, específicamente, con todas las opciones de estilo para ese componente (y solo para ese componente).
Y en el archivo 'custom-component.css', cada entrada comenzará con la etiqueta de componente personalizado:
Eso significa que no pierde la noción crítica de separación de la preocupación. Ver vs estilo. Si comparte su componente, es más fácil que otros le asignen un tema para que coincida con el resto de su página web.
fuente
Realmente depende de qué tan grande sea su aplicación, si desea usar paquetes como webpack y agrupar CSS y JS en la compilación y cómo quiere administrar el flujo de su aplicación. Al final del día, depende de tu situación, ¡puedes tomar una decisión!
Mi preferencia por organizar archivos en grandes proyectos es separar CSS y JS archivos , podría ser más fácil de compartir, más fácil para las personas de la interfaz de usuario simplemente pasar por los archivos CSS, ¡también una organización de archivos mucho más ordenada para toda la aplicación!
Siempre piense de esta manera, asegúrese de que en la fase de desarrollo todo esté donde debe estar, con un nombre adecuado y que sea fácil para otros desarrolladores encontrar cosas ...
Personalmente, los mezclo depende de mi necesidad, por ejemplo ... Intente usar CSS externo, pero si es necesario, React también aceptará el estilo, debe pasarlo como un objeto con valor clave, algo como esto a continuación:
fuente
Aquí está el estilo booleano basado en la sintaxis JSX :
fuente
Por lo general, tengo un archivo scss asociado a cada componente React. Pero, no veo la razón por la cual no encapsularía el componente con lógica y lo miraría. Quiero decir, tienes algo similar con los componentes web.
fuente
Dependiendo de su configuración, el estilo en línea puede ofrecerle una recarga en caliente. La página web se vuelve a representar inmediatamente cada vez que cambia el estilo. Esto me ayuda a desarrollar componentes más rápido. Dicho esto, estoy seguro de que puede configurar un entorno de recarga en caliente para CSS + SCSS.
fuente
Puede usar estilos en línea, pero tendrá algunas limitaciones si los usa en todos sus estilos, algunas limitaciones conocidas son que no puede usar pseudo-selectores CSS y consultas de medios allí.
Puedes usar radio para resolver esto, pero aún así, creo que si el proyecto crece, se volverá engorroso.
Recomendaría usar módulos CSS .
Al usar los módulos CSS , tendrá la libertad de escribir CSS en un archivo CSS y no tendrá que preocuparse por los conflictos de nombres, los módulos CSS se ocuparán de ello.
Una ventaja de este método es que le brinda funcionalidad de estilo al componente específico. Esto creará un código mucho más fácil de mantener y una arquitectura de proyecto legible para que el próximo desarrollador trabaje en su proyecto.
fuente
Para algunos componentes, es más fácil usar estilos en línea. Además, me resulta más fácil y conciso (ya que estoy usando Javascript y no CSS) para animar estilos de componentes.
Para componentes independientes, utilizo el 'Operador de propagación' o el '...'. Para mí, es claro, hermoso y funciona en un espacio reducido. Aquí hay una pequeña animación de carga que hice para mostrar sus beneficios:
EDITAR NOVIEMBRE 2019
Al trabajar en la industria (una compañía Fortune 500), NO se me permite hacer ningún estilo en línea. En nuestro equipo, hemos decidido que el estilo en línea no se puede leer y no se puede mantener. Y, después de haber visto de primera mano cómo los estilos en línea hacen que soportar una aplicación sea completamente intolerable, tendría que estar de acuerdo. Desaliento completamente los estilos en línea.
fuente
El problema con los estilos en línea es que las Políticas de seguridad de contenido (CSP) se están volviendo más comunes, lo que no lo permite. Por lo tanto, recomiendo evitar los estilos en línea por completo.
Actualización: para explicar más, los CSP son encabezados HTTP enviados por el servidor que restringen el contenido que puede aparecer en la página. Es simplemente una mitigación adicional que se puede aplicar a un servidor para evitar que un atacante haga algo malo si el desarrollador codifica mal el sitio.
El propósito de la mayoría de estas restricciones es detener los ataques XSS (cross-site scripting). XSS es donde un atacante descubre una manera de incluir su propio javascript en su página (por ejemplo, si hago mi nombre de usuario
bob<SCRIPT>alert("hello")</SCRIPT>
y luego publico un comentario, y usted visita la página, no debería mostrar una alerta). Los desarrolladores deben negar la posibilidad de que un usuario agregue contenido como este al sitio, pero en caso de que cometieran un error, CSP bloquea la carga de la página si encuentra algunascript>
etiqueta.Los CSP son solo un nivel adicional de protección para que los desarrolladores se aseguren de que si cometieron un error, un atacante no puede causar problemas a los visitantes de ese sitio.
De modo que todo es XSS, pero ¿y si el atacante no puede incluir
<script>
etiquetas pero puede incluir<style>
etiquetas o incluir unstyle=
parámetro en una etiqueta? Entonces él podría cambiar el aspecto del sitio de tal manera que te engañen para que hagas clic en el botón incorrecto o algún otro problema. Esto es mucho menos preocupante, pero aún así es algo que debe evitarse, y CSP lo hace por usted.Un buen recurso para probar un sitio para CSP es https://securityheaders.io/
Puede leer más sobre CSP en: http://www.html5rocks.com/en/tutorials/security/content-security-policy/
fuente
unsafe-inline
política. Esta política permite la restricción de un elemento de estilo<style>
no a los estilos en línea aplicados al atributo de estilo de un elemento:<div style="">
. Dado que la pregunta anterior se refiere al atributo de estilo, esto parece un mal consejo para evitar completamente los estilos en línea. Además,react
aconseja mover todos los CSS a JS: github.com/reactjs/react-future/blob/master/04%20-%20Layout/…unsafe-inline
desactiva todas las formas de estilos en línea, incluido el atributo de estilo. Puede usar mediante programación las API de estilo en un elemento a través de JS (pelem.style.color = 'blue';
. Ej. ), Pero no puede establecer el atributo de estilo en un elemento (al igual que'unsafe-inline'
en la directiva script-src, no se permiten etiquetas de script en línea, sino tambiénonclick
atributos y amigos)En comparación con la escritura de sus estilos en un archivo CSS, el atributo de estilo de React tiene las siguientes ventajas :
Sin embargo, el atributo de estilo de React viene con algunos inconvenientes : no puedes
Al usar CSS en JS, puede obtener todas las ventajas de una etiqueta de estilo, sin esos inconvenientes . A partir de hoy, hay algunos css populares y bien soportados en las bibliotecas js, que incluyen: Emotion, Styled-Components y Radium. Esas bibliotecas son como CSS lo que React es para HTML. Le permiten escribir su CSS y controlar su CSS en su código JS.
comparemos cómo se verá nuestro código para diseñar un elemento simple. Vamos a diseñar un div "hello world" para que se vea grande en el escritorio y más pequeño en el móvil.
Usando el atributo de estilo
Dado que la consulta de medios no es posible en una etiqueta de estilo, tendremos que agregar un className al elemento y agregar una regla css.
Usando la etiqueta 10 css de Emotion
Emotion también admite cadenas de plantillas, así como componentes con estilo. Entonces, si lo prefiere, puede escribir:
Detrás de las campanas "Css en JS" utiliza clases css. La emoción específicamente se creó teniendo en cuenta el rendimiento y utiliza el almacenamiento en caché. En comparación con los atributos de estilo React, Css en JS proporcionará un mejor rendimiento.
Mejores prácticas
Aquí hay algunas mejores prácticas que recomiendo:
El patrón de codificación de reacción es de componentes encapsulados: HTML y JS que controlan un componente se escriben en un archivo. Ahí es donde pertenece su código CSS / estilo para diseñar ese componente.
Cuando sea necesario, agregue un accesorio de estilo a su componente. De esta forma, puede reutilizar el código y el estilo escritos en un componente secundario y personalizarlo según sus necesidades específicas según el componente principal.
fuente
¡También puedes usar StrCSS, crea nombres de clase aislados y mucho más! Se vería un código de ejemplo. ¡Puede (opcional) instalar la extensión VSCode desde Visual Studio Marketplace para obtener soporte de resaltado de sintaxis!
fuente: strcss
fuente
En algún momento necesitamos diseñar un elemento de un componente, pero si tenemos que mostrar solo ese componente o si el estilo es tan pequeño, en lugar de usar la clase CSS, buscamos el estilo en línea en react js. el estilo en línea de reactjs es igual al estilo en línea de HTML, solo que los nombres de las propiedades son un poco diferentes
Escriba su estilo en cualquier etiqueta usando style = {{prop: "value"}}
fuente
Actualización 2020: la mejor práctica es usar una biblioteca que ya haya hecho el trabajo duro por usted y no mate a su equipo cuando realiza el cambio como se señala en la respuesta originalmente aceptada en este video (aún es relevante). También solo para tener una idea de las tendencias, este es un gráfico muy útil . Después de hacer mi propia investigación sobre esto, elegí utilizar Emotion para mis nuevos proyectos y ha demostrado ser muy flexible y escalable.
Dado que la respuesta más votada de 2015 recomendó Radium, que ahora está relegado al modo de mantenimiento . Por lo tanto, parece razonable agregar una lista de alternativas. La publicación que discontinúa Radium sugiere algunas bibliotecas. Cada uno de los sitios vinculados tiene ejemplos disponibles, por lo que me abstendré de copiar y pegar el código aquí.
fuente
De todos modos, nunca se recomienda css en línea. Utilizamos componentes con estilo en nuestro proyecto que se basa en JSS. Protege la anulación de CSS al agregar nombres de clase dinámicos en los componentes. También puede agregar valores CSS basados en los accesorios pasados.
fuente