2016-11-17 144 views
0

無法爲我的生活弄清楚這一點。每次調用setState()時,組件都應該重新渲染,對吧?我設置了一系列打印語句,所以我可以看到我的處理程序正在被觸發,但render()不是。請幫我理解這裏出了什麼問題!無法讓React組件重新渲染

這裏是我的代碼的重要部分:

我的構造函數:

constructor(){ 
 
    super(); 
 
    this.state = {upvoted:false} 
 
    this.handleFavorite = this.handleFavorite.bind(this); 
 
    }

我的處理程序:

handleFavorite(event){ 
 
    event.preventDefault(); 
 

 
    console.log("handleFavorite fired"); 
 

 
    var query=location.pathname; 
 
    query = query.split('/'); 
 
    var username1=query[2]; 
 
    var playlist=query[3]; 
 

 
    var vote = this.props.data.vote; 
 

 
    var self = this; 
 

 
    if (username1) { 
 
     request 
 
     .post('/api/endpoint') 
 
     .end(function(err, res) { 
 
       self.setState({upVoted: true}); 
 
       self.forceUpdate(); 
 
       console.log("status "+res.body.status); 
 
     }); 
 
    } 
 

 
    }

我的處理程序調用:

render() { 
 
    return (
 
    <div onClick={this.handleFavorite}>stuff</div> 
 
); 
 
}

+0

你怎麼能告訴組件不重新渲染?你把日誌聲明沒有被調用,或者...?請分享應該被調用的渲染函數,而不是。 – LoremIpsum

回答

0

setState應觸發render你,沒有必要呼籲forceUpdate

setState是異步的所以你forceUpdate將觸發之前state獲得更新