!Estilos en línea importantes en reaccionar

3 minutos de lectura

Avatar de usuario de Allan Hortle
allan hortel

¿Hay alguna manera de agregar estilos en línea con la anulación importante?

style={
  height: 20+'!important'
};

<div style={style}></div>

Esto no está funcionando como hubiera esperado.

  • Sí, tratando de obtener algunas buenas animaciones de transición de listas. Necesita saber la altura exacta para obtener la animación más suave.

    – Allan Hortel

    22 de abril de 2014 a las 1:42

  • cuidado, descubrí que configurar un estilo ‘en línea’ con reaccionar (como un objeto) con !important como hiciste allí, dará problemas si actualizas la propiedad con otra !important variedad Se mantendrá el primero !important propiedad y no actualiza…

    – TrySpace

    25 de julio de 2014 a las 13:03

  • usar CSS real? Todavía estoy luchando porque estamos luchando contra lo que es natural solo para hacerlo de la manera que reacciona … pero todavía estoy interesado en esa respuesta useRef

    – Andy

    29 de enero de 2022 a las 0:51


Avatar de usuario de Daniel
Daniel

Aparentemente, React no es compatible con esto. Pero obtuve este truco mientras investigaba.

    <div ref={(node) => {
      if (node) {
        node.style.setProperty("float", "right", "important");
      }
    }}>                    
    </div>

Buena suerte:)

  • wtf con reaccionar, hace que todas las tareas fáciles sean más difíciles

    – Taufik Nur Rahmanda

    24 de marzo de 2020 a las 3:00

Avatar de usuario de Bandido
Bandido

20+'!important' es '20!important'.

Cuando solo das un número, react agrega “px” por ti; pero está utilizando una cadena, por lo que debe especificar la unidad. También estoy bastante seguro de que debe haber un espacio entre “! importante” y lo que esté a la izquierda.

style={{ height: '20px !important' }};

  • O solo '20px !important'ya que no hay necesidad de concatenación de cadenas.

    – Félix Kling

    15 de abril de 2014 a las 5:57

  • Trabajó en reaccionar 0.14.x pero no en reaccionar 15.0.0

    – rlovtang

    08/04/2016 a las 11:27


  • Estoy intentando esto con ‘%’ y sin suerte. Sin el !important marcar al menos veo mi valor tachado en la consola.

    – Jacksonkr

    4 sep 2019 a las 13:18

  • Hay una declaración oficial en GitHub que no admiten !important a propósito. ¡Entonces esta respuesta no puede funcionar! Sin embargo, no comparto la opinión de que nunca debes usar !importantque es la razón que dan para no apoyarlo en React inline styles. Pero hay otra manera.

    – anarquista912

    4 sep 2019 a las 16:40


  • “Oficial” (como en un desarrollador de React que usa ‘nosotros’ en un comentario de GitHub) declaración es “sería costoso verificar cada valor para !importante, por lo que respaldar esto no es increíble. Incluso si obtenemos una buena opción, es poco probable que hagamos esto mientras admitamos IE8 porque no quiero ir por esa ruta cssText. Esto no se trata realmente de un dogma, diría que se trata más de rendimiento.” Saben que ya se puede hacer con ref y nadie ha enviado un buen RFC para respaldarlo todavía, por lo que todavía no está disponible.

    – formicini

    31 de diciembre de 2021 a las 4:08

Avatar de usuario de Mario Saraiva
Mario Saraiva

Un buen truco que es más limpio y consistente para otras propiedades de CSS:

ref={(el) => el && el.style.setProperty(<property>, <value>, "important")}

¡Espero que esto ayude!

  • Hola, debe consultar este artículo sobre cómo usar Markdown para formatear su código en SO

    – Marcello B.

    11 oct 2018 a las 16:47

Esta es la única forma en que podría hacer que funcione con React 16.

const id="unique_id"; 
<React.Fragment>
    <style>
      {`
#${id} {
  background-color: transparent !important;
}
      `}
    </style>
    <Frame id={id} />
</React.Fragment>

avatar de usuario de anarchist912
anarquista912

recomiendo usar componentes con estilosi tiene una buena razón para hacer uso de !importantya que los accesorios de estilo no son compatibles !important y probablemente no en el futuro.

Aquí hay un ejemplo donde sobrescribimos Semantic-UI’s padding en grid columns. De hecho, puede omitir el !important como “aumentando la especificidad” es suficiente.

const StyledColumn = styled.div(({size}) => ({className: `${size} wide column`})`
    &&&&& {
        padding-top: 0.3rem !important;
        padding-bottom: 0.3rem !important;
    }
`
<StyledColumn size="three"></StyledColumn>

&&&&&&&

Esto es originalmente respondido por Daniel arriba. Solo quiero compartir mi respuesta mientras refactorizo ​​su respuesta para que funcione con ganchos.

  1. Definir referencia const ref = useRef(null);
  2. Agregue ref a su nodo deseado (por ejemplo, div, tabla) <div ref={ref}></div>
  3. Agrega este código ref.current.style.setProperty(<property>, <value>, "important") dentro useLayoutEffect

Consulte los códigos de ejemplo a continuación.

import React, { useRef, useLayoutEffect } from "react";


const SampleComponent = () => {

   const ref = useRef(null);

   useLayoutEffect(() => {
    ref.current.style.setProperty("border-top", "0px", "important");
  }, []);

   return (
      <div ref={ref}>
         {/* additional codes here */}
      </div>
   )
}

Nota:

  • la propiedad está en formato CSS (por ejemplo, “border-top”)

Avatar de usuario de Gary
Gary

Sí, la forma en que encontré hacer esto fue la que ya se mencionó anteriormente:

const styles = (theme: any) => ({
    panelSize: {
        height: 480,
        width: 360,
    },
    progress: {
        height: '120px !important', 
        margin: theme.spacing.unit * 2,
        width: '120px !important'
    }
});

¿Ha sido útil esta solución?