2017-09-24 87 views
0

我想設置狀態,然後在設置它之後調用當前狀態的另一個函數。this.setState不工作

我有這樣的代碼

this.setState({ 
     candidates : diCandi 
    },()=>{ 
     this.createDataSource(this.state) 
     console.log("The state is=>",this.state); 
    }); 

我想打電話給this.createDataSource(this.state)與我剛剛更新的狀態。 它不工作我不知道爲什麼。有什麼我做錯了

Infact當我註銷狀態。我從來沒有看到日誌中的代碼。

+1

_not working_是不夠的信息。請給你的問題更多的背景。如果您收到任何錯誤或奇怪的行爲,請將其添加到您的問題。 – bennygenel

+1

這應該工作,回調的關鍵是它不會觸發,直到狀態更新(因爲這可能是異步)。請使用Stack Snippets('[<>]'工具欄按鈕)使用** runnable ** [mcve]更新您的問題。 Stack Snippets支持React,包括JSX; [這是如何做一個](http://meta.stackoverflow.com/questions/338537/)。 –

+0

澄清什麼是「不能工作」。你可以嘗試在'createDataSource'內登錄,看看狀態是否是新的(它應該是)。所以你需要找出什麼是不工作的。 – Panther

回答

1

class App extends React.Component{ 
 
    constructor(props){ 
 
    super(props) 
 
    this.state = { candidates: "no candidates" } 
 
    } 
 
    
 
    shouldComponentUpdate(){ 
 
    return false; 
 
    } 
 
    
 
    buttonClick(e){ 
 
    this.setState({candidates: "diCandi"},() => console.log("updated")) 
 
    } 
 
    
 
    render(){ 
 
    return(
 
    <div> 
 
     <button onClick={this.buttonClick.bind(this)}>set candidates</button> 
 
     <b>{this.state.candidates}</b> 
 

 
     </div> 
 
    ) 
 
    } 
 
} 
 

 
const MOUNT_NODE = document.getElementById('container') 
 
ReactDOM.render(<App />, MOUNT_NODE)
<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="container">

如早些時候薩格爾,在this.setState回調(中提到的代碼應工作)只踢英寸回調的工程,即使shouldComponentUpdate是返回false

-2

試試這個:

this.setState({ 
    candidates : diCandi 
}).then(()=>{ 
    this.createDataSource(this.state) 
    console.log("The state is=>",this.state); 
}); 

this.setState()是一個異步函數。國家已經設置後

+0

謝謝,但爲我工作 – henrybbosa

1

您發送所有狀態createDataSource你可以做

this.setState({ 
    candidates : diCandi 
},()=>{ 
    this.createDataSource(this.state.candidates) 
    console.log("The state is=>",this.state.candidates); 
}); 

還建議從createDataSource方法訪問狀態不發送它作爲PARAMS

this.setState({ 
    candidates : diCandi 
},()=>{ 
    this.createDataSource() 
    console.log("The state is=>",this.state.candidates); 
}); 
createDataSource

createDataSource() { 
    this.state.candidates 
    .... rest of code 
} 

然後