有没有办法在 react JS 中使用 onClick 有条件地呈现内容?

时间:2021-02-07 20:08:33

标签: javascript reactjs conditional-statements rendering

有没有办法在下面实现有条件渲染的内容,而不是在 return 语句中使用 {renderAuthButton()},我想实现使用 onCLick 运行 renderAuthButton()?

class App extends Component {
  // ...

  render() {
    let {isLoggedIn} = this.state;

    const renderAuthButton = () => {
      if (isLoggedIn) {
        return <button>Logout</button>;
      } else {
        return <button>Login</button>;
      }
    }

    return (
      <div className="App">
        <h1>
          This is a Demo showing several ways to implement Conditional Rendering in React.
        </h1>
        {renderAuthButton()}
      </div>
    );
  }
}

2 个答案:

答案 0 :(得分:3)

我不太明白你的需求,但有条件地渲染,你可以做类似的事情

state = {
  show: false,
}
<div className="App">
        <button onClick={() => this.setState((prev) => { show: !prev.show })}>Toggle</button>
        {this.state.show && <MyComponent />}
      </div>

答案 1 :(得分:0)

我不完全确定您要做什么,但这是您在 react 中有条件地呈现内容的方式:

class App extends React.Component {
  constructor(props){
    super(props);
    
    this.state = {
      show: false
    }
    
    this.toggleShow = this.toggleShow.bind(this);
  }
  
  toggleShow(){
    this.setState({show: ! this.state.show})
  }
 
  render(){
    return (
      <div>
        <button onClick={this.toggleShow}>Filter Content</button>
        
        {this.state.show ? (
          <p>This content is conditionally shown</p>
        ) : (
          <p>The content is now hidden</p>
        )}
      </div>
    )
  }
}

ReactDOM.render(<App />, document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

相关问题