2016-06-09 10 views
7

Próbuję renderować div na tej samej stronie, gdy użytkownik kliknie łącze.Jak wyświetlić CSS: brak w ramach warunku z React JSX?

Moja strona HTML:

<div class="stores"> 
    <h1>Stores</h1> 
    <ul class="stores"> 
    <li><a href="#" onClick={this.onClick} >Store A</a></li> 
    <li>Store B</li> 
    <li>Store C</li> 
    </ul> 
</div> 

My components/store.js.jsx:

var Store = React.createClass({ 
    getInitialState: function() { 
    return { showStore: false }; 
    }, 
    onClick: function() { 
     this.setState({ showStore: true }); 
    }, 
    render: function() { 
    return(
    <div className="row account stores" style={{display: { this.state.showStore ? 'block' : 'none'} }}> 
     <div>a lot more divs</div> 
     </div> 
    ); 
    } 
}); 

Ale otrzymuję:

SyntaxError: unknown: Unexpected token

dla tej linii:

style={{display: { this.state.showStore ? 'block' : 'none'} }} 

Jak zagnieżdżać się warunkowo w stylu?

+1

dzięki @ctrlplusb, można podać swój komentarz jako odpowiedź? zadziałało! – StandardNerd

Odpowiedz

20

Jest to spowodowane niewłaściwym użyciem operatora trójskładnikowego. Zobacz dokumentację tutaj: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Nie powinieneś owijać go tak, jak to uczyniłeś, {}.

Spróbuj wykonać następujące czynności:

style={{display: this.state.showStore ? 'block' : 'none' }} 
+7

Nie mogę znaleźć w dokumentacji React, ale jeśli ustawisz atrybut stylu na 'null' React w ogóle nie doda atrybutu do węzła DOM. Tak więc poniżej ustawia się 'display: none' lub nic w oparciu o warunek. 'style = {{display: isHidden? "none": null}} ' Jest to przydatne, jeśli podasz wartość wyświetlania w css - na przykład jakąś formę flexbox - i nie chcesz, aby ta wartość była kodowana w javascript. – wiktor

0

Można również warunkowo utworzyć element poprzez

{ 
    this.state.showStore 
    ? <div className="row account stores"> 
     <div>a lot more divs</div> 
     </div> 
    : null 
    }