如何使用React JSX在条件下显示CSS:无?

Sta*_*erd 35 javascript reactjs

我试图div在用户点击链接时在同一页面上呈现一个.

我的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>
Run Code Online (Sandbox Code Playgroud)

我的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>
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

但我得到一个:

SyntaxError:unknown:意外的令牌

对于这一行:

style={{display: { this.state.showStore ? 'block' : 'none'} }}
Run Code Online (Sandbox Code Playgroud)

如何在一个风格中有条件地嵌套?

ctr*_*usb 59

这是由于三元运算符的使用不正确.请参阅此处的文档:https: //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

你不应该{}像你一样包裹它.

请尝试以下方法:

style={{display: this.state.showStore ? 'block' : 'none' }}
Run Code Online (Sandbox Code Playgroud)

  • 我在React文档中找不到,但如果你将一个style属性设置为`null`则React根本不会将该属性添加到DOM节点.所以以下只根据条件设置`display:none`或者什么都没有.`style = {{display:isHidden?'none':null}}`如果你在css中指定显示值 - 例如某种形式的flexbox - 这是很有用的,你不想在javascript中对这个值进行硬编码. (11认同)

005*_*005 7

您还可以通过以下方式有条件地创建元素

   { 
     this.state.showStore 
     ? <div className="row account stores">
        <div>a lot more divs</div>
       </div> 
     : null 
   }
Run Code Online (Sandbox Code Playgroud)


cqu*_*zel 5

您还可以在 CSS 中更改类名和样式。

// outside render
const NORMAL = "row account stores"
const HIDDEN = NORMAL + " hidden"

// In render
render: function() {
  return(
    <div className={this.state.showStore ? NORMAL : HIDDEN}>
      <div>a lot more divs</div>
        </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

请注意,通常最好不要在渲染函数中使用双花括号 {{,因为您经常在每次渲染执行时创建一个新对象。例如:

{display: true ? 'block' : 'none' } === {display: true ? 'block' : 'none' } // false

// outside render
const BLOCK = {diplay: 'block'}
const NONE= {diplay: 'none'}

// in render
{this.state.showStore ? BLOCK : NONE}
Run Code Online (Sandbox Code Playgroud)