2016-05-13 45 views
2

我有:ReactJS SETSTATE不重新描繪

JobScreen

handleSetView(mode, e) { 
     this.setState({ 
      view: mode 
     }); 
     console.log(this.state.view) 
    } 

    render() { 
     return (

      <div className="jobs-screen"> 
       <div className="col-xs-12 col-sm-10 job-list"><JobList view={this.state.view} /></div> 
       <div className="col-xs-12 col-sm-2 panel-container"> 
        <div className="right-panel pull-right"><RightPanel handleSetView={this.handleSetView} /></div> 
... 
) 
} 

RightPanel

render() { 
     return (
      <div> 
       <div className="controls"> 
        <span className="title">Views <img src="images\ajax-loader-bar.gif" width="24" id="loader" className={this.state.loading ? "pull-right fadeIn" : "pull-right fadeOut"}/></span> 
        <button onClick={this.props.handleSetView.bind(this, 'expanded')}><img src="/images/icons/32px/libreoffice.png" /></button> 
        <button onClick={this.props.handleSetView.bind(this, 'condensed')}><img src="/images/icons/32px/stack.png" /></button> 
        </div> 
... 
)} 

作業表

render() { 
     var jobs = []; 
     this.state.jobs.forEach((job) => { 
      jobs.push(
       <Job key={job.id} job={job} view={this.props.view} loading={this.state.loading} toggleTraderModal={this.props.toggleTraderModal} toggleOFTModal={this.props.toggleOFTModal}/> 
      ); 
     }); 

     return (
      <div> 
       {jobs} 
      </div> 
     ); 
    }; 

問題是,是,視圖狀態的變化沒有不要放棄任何兒童元素。

我該如何得到這個工作?

+0

您是否有任何錯誤? –

+0

沒有錯誤。 – imperium2335

回答

1

不知道這是你的問題的核心,但:

handleSetView={this.handleSetView} 

是錯誤的,因爲JS如何結合這一點。使用:

handleSetView={this.handleSetView.bind(this)} 

改爲。

此外,

this.setState({ 
    view: mode 
}); 
console.log(this.state.view) 

似乎有些奇怪;請注意,this.state在您撥打setState後不會被修改,但React可能需要一些時間纔會調度預定的setState操作。將該console.log放入渲染中以查看它何時被實際調用。

最後,確保您的組件沒有實現shouldComponentUpdate生命週期方法(你可能不這樣做明確的,但如果你的組件延伸到比React.Component其他一些類可能出現這種情況)

+0

全國聯保:)我錯過了.bind(這個)。那究竟做了什麼? – imperium2335

+0

:) 當你調用'handleSetView'時,它確保'this'正確綁定到組件對象(這不會在js中自動發生) –

+0

@Thomas Kulich我確信這只是一個愚蠢的錯誤,但你說這不會自動發生在JS,我認爲你的意思是在ES2015。 – sheeldotme

0

this是在反應組件的上下文或者將this的引用傳遞給您的函數handleSetView或綁定,如@Tomas提到的