2017-08-08 59 views
0

此代码导致无限循环。一个if ... else带有两个导致无限循环的setStates

我试图呈现一个按钮和文本,显示按钮被点击了多少次,直到它被点击10次,之后按钮应该消失,文本重新回到之前的任何事情+“现在它消失了“。

class button extends React.Component 
{ 
constructor (props) 
{ 
    super(props) 

    this.state = 
    { 
     num: 0, 
     para: null 
    } 
} 

render() { 

    var myString = <p> you clicked the button {this.state.num} times {this.state.para} </p>; 

    let either; 
    if (this.state.num < 10) { 
     either = (
     <Button onClick={() => { this.handleButtonClick() }} bsStyle="danger"> button </Button>) 
    } else { 
     either = null; 
     this.setState({ para: "and now it's gone" }); 
    } 

    return(
     <Grid> 
      <Row> 
       <Col xs={7} sm={7} md={7} lg={7}> {myString} </Col> 
       <Col xs={5} sm={5} md={5} lg={5}> 
          { either } 
       </Col> 
      </Row> 
     </Grid> 
    ) 
} 
handleButtonClick() { 
    this.setState({ 
     num: this.state.num + 1 
    }) 
} 
} 

任何帮助,将不胜感激!

+0

有问题的特定错误是“setState(...):无法在现有状态转换期间更新(例如在'render'或另一个组件的构造函数中)。” – jaonthecob

+1

错误消息对我来说似乎很清楚。 – Pointy

+0

不要在'render'中使用'setState' – Hamms

回答

3

setState调用重新渲染,并且您在渲染方法中调用setState。

+1

我一直听说在渲染中使用setstate是不好的,因为它调用了重新渲染,从而再次发射setstate,导致无限循环。也许这是不正确的? – jaonthecob

+0

@jaonthecoe这是正确的 – Chase