根据变量

时间:2018-04-10 23:49:48

标签: javascript reactjs

我创建了一个加载图标组件,它只是在加载内容时显示一个微调器。我将其加载到我的登录组件中,并希望在用户单击“登录”按钮后显示图标(并且API调用正忙)。

所以:

import Loading from '../common/loading';

然后我设置了一个isLoading变量,默认为false:

this.isLoading = false;

然后,在我的渲染方法中,我希望确定是否需要显示微调器。

render() {

  var LoadingSpinner = this.state.canLogin ? Loading : '<div></div>';

这失败了。

然后我的按钮就是我显示微调器的地方。我希望隐藏“登录”&#39;文本,并用微调器替换它,但是......首先要根据isLoading变量处理微调器。

 <button 
              className="btn btn-lg btn-primary btn-block" 
              type="button" 
              onClick={this.handleSignin} 
              disabled={!this.state.canLogin}>
                <span>Sign in</span> <LoadingSpinner />
              </button>
          </div>

可以/应该这样做,或者......我是否可以将道具传递给我的装载组件,称为“可见&#39;什么的,我设定了吗?

2 个答案:

答案 0 :(得分:0)

将isLoading放到构造函数中,默认为false 然后在render方法中,只需添加一个条件

{ this.state.canLogin ? <LoadingSpinner /> : null }

答案 1 :(得分:0)

使用状态变量,您可以执行此操作。

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      loading: false
    }
  }
  onClick = () => {
    this.setState({
      loading: true
    })
  }
  render() {
    return (
        <div>
          {this.state.loading && <div>Loading</div>}
          <button onClick={this.onClick}>Click to Load</button>
        </div>
    );
  }
}

ReactDOM.render( < App / > , document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='root'>
</div>