Me gusta bastante el patrón CSS en línea en React y decidí usarlo.
Sin embargo, no puede usar los :hover
selectores y similares. Entonces, ¿cuál es la mejor manera de implementar resaltar al pasar el mouse mientras se usan estilos CSS en línea?
Una sugerencia de #reactjs es tener un Clickable
componente y usarlo así:
<Clickable>
<Link />
</Clickable>
El Clickable
tiene un hovered
estado y lo pasa como accesorios al Enlace. Sin embargo, el Clickable
(la forma en que he implementado) envuelve al Link
de una div
manera que pueda establecer onMouseEnter
y onMouseLeave
a la misma. Sin embargo, esto hace las cosas un poco más complicadas (por ejemplo, span
envuelto en un div
comportamiento diferente al span
).
¿Hay alguna forma más simple?
onMouseEnter
yonMouseLeave
. En cuanto a la implementación exacta de eso, depende totalmente de usted. Para ver su ejemplo específico, ¿por qué no hacer el<Clickable/>
envoltorio aspan
?Respuestas:
Estoy en la misma situación. Realmente me gusta el patrón de mantener el estilo en los componentes, pero los estados de desplazamiento parecen ser el último obstáculo.
Lo que hice fue escribir un mixin que puedes agregar a tu componente que necesita estados flotantes. Este mixin agregará una nueva
hovered
propiedad al estado de su componente. Se establecerátrue
si el usuario se desplaza sobre el nodo DOM principal del componente y lo vuelve a establecerfalse
si los usuarios abandonan el elemento.Ahora en la función de renderización de componentes puede hacer algo como:
Ahora, cada vez que el estado del
hovered
estado cambia, el componente volverá a aparecer.También he creado un repositorio de sandbox para esto que utilizo para probar algunos de estos patrones yo mismo. Compruébalo si quieres ver un ejemplo de mi implementación.
https://github.com/Sitebase/cssinjs/tree/feature-interaction-mixin
fuente
Creo que onMouseEnter y onMouseLeave son los caminos a seguir, pero no veo la necesidad de un componente de contenedor adicional. Así es como lo implementé:
Luego puede usar el estado de desplazamiento (verdadero / falso) para cambiar el estilo del enlace.
fuente
:hover
pero no:focus
onFocus
evento; por lo que podría hacer lo mismo para los:focus
que:hover
, excepto que en lugar de necesitaronMouseEnter
yonMouseLeave
sólo necesitaríaonFocus
Tarde para la fiesta pero ven con la solución. Puede usar "&" para definir estilos para pasar el mouse sobre nth Child, etc.
fuente
Puede usar Radium: es una herramienta de código abierto para estilos en línea con ReactJS. Agrega exactamente los selectores que necesita. Muy popular, échale un vistazo - Radio en npm
fuente
module.exports = React.createClass({ displayName: 'App',})
module.exports = Radium(React.createClass({ displayName: 'App',}))
o asignarle la clase a un valor y agregar el@Radium
decorador encima, ya que los documentos mencionan github.com/FormidableLabs/radium#usageEl soporte completo de CSS es exactamente la razón por la que esta gran cantidad de bibliotecas CSSinJS, para hacer esto de manera eficiente, necesita generar CSS real, no estilos en línea. También los estilos en línea son mucho más lentos en reaccionar en un sistema más grande. Descargo de responsabilidad: mantengo JSS .
fuente
Made Style It , en parte, por esta razón (otros están en desacuerdo con la implementación de otras librerías / sintaxis y estilos en línea falta de soporte para prefijar valores de propiedad). Creemos que deberíamos poder simplemente escribir CSS en JavaScript y tener componentes totalmente autónomos HTML-CSS-JS. ¡Con las cadenas de plantilla ES5 / ES6 ahora podemos y también puede ser bonito! :)
npm install style-it --save
Sintaxis Funcional ( JSFIDDLE )
Sintaxis JSX ( JSFIDDLE )
fuente
Además de la respuesta de Jonathan , aquí están los eventos para cubrir el enfoque y los estados activos, y un uso en
onMouseOver
lugar deonMouseEnter
ya que este último no burbujeará si tiene elementos secundarios dentro del objetivo al que se aplica el evento.fuente
Aquí está mi solución usando React Hooks. Combina el operador de propagación y el operador ternario.
style.js
Button.js
fuente
En lo que respecta a los componentes con estilo y react-router v4 , puede hacer esto:
fuente
Este puede ser un buen truco para tener un estilo en línea dentro de un componente de reacción (y también usar la función CSS: hover):
fuente
Pedido Typestyle si está utilizando reaccionar con Letra de imprenta.
A continuación se muestra un código de muestra para: hover
fuente
Puede usar módulos css como alternativa, y adicionalmente react-css-modules para la asignación de nombres de clase.
De esa manera, puede importar sus estilos de la siguiente manera y usar un CSS normal con ámbito local para sus componentes:
Aquí hay un ejemplo de módulos webpack css
fuente
:hover
estilos en tiempo de ejecución como puede hacerlo con Radium u otraonMouseOver
solución basadaonMouseOver y onMouseLeave con setState al principio me parecieron un poco costosos, pero como así es como funciona la reacción, me parece la solución más fácil y limpia.
Por ejemplo, renderizar un servidor CSS temático también es una buena solución y mantiene los componentes de reacción más limpios.
si no tiene que agregar estilos dinámicos a elementos (por ejemplo, para una temática), no debe usar estilos en línea, sino usar clases css.
Esta es una regla html / css tradicional para mantener html / JSX limpio y simple.
fuente
La manera simple es usar un operador ternario
fuente
Con un uso de los ganchos:
fuente
Utilizo una solución bastante hack-ish para esto en una de mis aplicaciones recientes que funciona para mis propósitos, y me parece más rápido que escribir funciones de configuración de desplazamiento personalizado en vanilla js (aunque, reconozco, tal vez no sea una mejor práctica en la mayoría de los entornos ..) Entonces, en caso de que todavía estés interesado, aquí va.
Creo un elemento padre solo por mantener los estilos javascript en línea, luego un hijo con un className o id en el que se enganchará mi hoja de estilo css y escribiré el estilo de desplazamiento en mi archivo css dedicado. Esto funciona porque el elemento hijo más granular recibe los estilos js en línea a través de la herencia, pero sus archivos de desplazamiento se anulan por el archivo css.
Básicamente, mi archivo CSS actual existe con el único propósito de mantener los efectos de desplazamiento, nada más. Esto lo hace bastante conciso y fácil de administrar, y me permite hacer el trabajo pesado en mis estilos de componentes React en línea.
Aquí hay un ejemplo:
Observe que el estilo en línea "hijo" no tiene un conjunto de propiedades "color". Si lo hiciera, esto no funcionaría porque el estilo en línea tendría prioridad sobre mi hoja de estilo.
fuente
No estoy 100% seguro de si esta es la respuesta, pero es el truco que uso para simular el CSS: efecto de desplazamiento con colores e imágenes en línea.
CSS:
Ejemplo: https://codepen.io/roryfn/pen/dxyYqj?editors=0011
fuente
Donde Hoverable se define como:
fuente