2015-07-05 14 views
9

Mam prosty komponent React, który akceptuje rekwizyt, który ukrywa/pokazuje dzieci komponentu. Ukrywam/pokazuję, używając atrybutu stylu i display: none. Jeśli użyję display: none !important, komponent przestanie się wyświetlać ponownie po otrzymaniu nowych rekwizytów.React dodając! Ważne wydaje się przerwać ponowne renderowanie komponentu

wewnątrz metody renderowania, wygląda to tak:

var style = {}; 

if(shouldHide) { 
    //this works 
    style = { 
     display: 'none' 
    }; 
    //this does not 
    //style = { 
    // display: 'none !important' 
    //}; 
} 

return (
    <span style={style} {...this.props} /> 
); 

Oto pełny przykład: https://jsfiddle.net/ccnokes/LnrnrLy2/ (odpowiednie linie zaczynają się od linii 27)

Co tu się dzieje? Czy czegoś brakuje?

+0

Dlaczego musisz 'important' w ogóle! Style wewnętrzne mają wyższy priorytet niż wszystkie inne style. –

+0

Jeśli arkusz stylów ma z jakiegoś powodu "display: block! Important", styl liniowy go nie przełączy, prawda? – ccnokes

+0

Tak, masz rację. Mój błąd. –

Odpowiedz

6

!important jest obecnie nieobsługiwane - https://github.com/facebook/react/issues/1881

Nie pojawia będą dodając go w najbliższym czasie.

Oferują one to jako obejście:

var sheet = document.createElement('style'); 
document.body.appendChild(sheet); 
sheet.innerHTML = 'html {font-size: 1em !important;}'; 

Ale nie wiem, czy chcesz iść tą drogą, czy nie.

udało mi się rozwiązać za pomocą przełącznika klasy:

//css 
.hidden {display: none !important}; 
//jsx 
var hideClass; 

if(shouldHide) { 
    hideClass = "hidden"; 
} 

return (
    <span className={hideClass} {...this.props} /> 
); 

Updated poszedł do przodu i dodaje obejście powyżej. I skrzypce tutaj - https://jsfiddle.net/kellyjandrews/oan4grme/

Niezupełnie odpowiedź chciał, ale działa :)

+0

Taa, to działa również dla mnie. Miałem nadzieję, że uniknę użycia klasy CSS, ponieważ planuję ponowne wykorzystanie komponentu w różnych aplikacjach, więc nie chcę przyjmować żadnych założeń na temat CSS. – ccnokes

+0

Chciałbym wiedzieć, co konkretnie sprawia, że ​​styl inline jest renderowany. Próbowałem kilku iteracji, ale nic nie działałoby tak, jak bym tego oczekiwał. –

+0

Uzgodnione. Dam temu postowi trochę więcej czasu na SO, aby sprawdzić, czy jest rozdzielczość, jeśli nie, otworzę problem na GitHubie reagowania – ccnokes

Powiązane problemy