React.js切换显示

时间:2017-05-06 03:13:05

标签: javascript css reactjs

我正在尝试使用React.js中的按钮在我的页面上切换内容如果我按下按钮,我希望内容消失。如果我再次按下它,我希望内容再次出现。我尝试了所有我能想到的东西,但似乎没有任何效果。我最初尝试了一个三元语句,看看我是否可以切换,但它只是打破了我的应用程序。有人能告诉我如何改进项目的这一部分吗?这就是我所拥有的:

//App.js


import React, { Component } from 'react';

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      isToggle: false
    };
  }

  handleClick(e) {
    this.setState({ !isToggle ? isToggle: true : isToggle: false });
  }

  render() {

    const style = {
      display: none
    };

    return (
      <div>
        <h1 className="text-xs-center">List of items:</h1>
        <button onClick={this.handleClick.bind(this)} className="btn btn-primary">Toggle</button>
        <div className="container" style={!isToggle ? style.display = none : style.display = block}>
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
          <li>Item 4</li>
        </div>
      </div>
    );
  }
}

export default App;

基本上,我想切换第1项,第2项,第3项,第4项。

5 个答案:

答案 0 :(得分:3)

如果我要组成组件,这将是它的形状。

import React, { Component } from 'react';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {isToggle: false};
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(e) {
    this.setState({isToggle: !this.state.isToggle});
  }

  render() { 
    return (
      <div>
        <h1 className="text-xs-center">List of items:</h1>
        <button
          className="btn btn-primary"
          onClick={this.handleClick}
        >
          Toggle
        </button>
        <div
          style={{display: this.state.isToggle ? 'block': 'none'}}
          className="container"
        >
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
          <li>Item 4</li>
        </div>
      </div>
    );
  }
}

export default App;

答案 1 :(得分:2)

您可以使用条件渲染代替CSS:

import React, { Component } from 'react';

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      isVisible: false
    };
    this.onToggle = this.onToggle.bind(this);
  }

  onToggle(e) {
    this.setState({isVisible: !this.state.isVisible});
  }

  render() {    
    return (
      <div>
        <h1 className="text-xs-center">List of items:</h1>
        <button onClick={this.onToggle} className="btn btn-primary">Toggle</button>

        {this.state.isVisible &&
          <div className="container">
            <li>Item 1</li>
            <li>Item 2</li>
            <li>Item 3</li>
            <li>Item 4</li>
          </div>
        }
      </div>
    );
  }
}

export default App;

答案 2 :(得分:1)

试试我的方式

print(paste("mean =",
              mean(s[s$flavor == "original", "age"]), 
              "sd =",
              sd(s[s$flavor == "original", "age"])))

答案 3 :(得分:0)

更改此行..

        <div className="container" style={!isToggle ? style.display = none : style.display = block}>

为...

<div className="container" style={!isToggle ? {display:'none'} : {display: 'block'}} >

内联'style'应该返回一个JSON对象{{key:'value,key2':'value2'}}。

答案 4 :(得分:0)

您可以使用箭头功能来做到这一点。在我看来要简单得多。

import React, { Component } from 'react';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {isToggle: false};
  }

  render() { 
    return (
      <div>
        <h1 className="text-xs-center">List of items:</h1>
        <button
          className="btn btn-primary"
          onClick={ () => this.setState({ isToggle: !this.state.isToggle }) }
        >
          Toggle
        </button>
        <div
          style={{display: this.state.isToggle ? 'block' : 'none'}}
          className="container"
        >
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
          <li>Item 4</li>
        </div>
      </div>
    );
  }
}

export default App;