2017-05-29 231 views
1

我有一個函數,在設置了某些事情之後需要執行。我使用setStates回調函數,像這樣稱呼它:狀態變化後setState回調沒有觸發

setState({ 
    myState:myState 
},secondFunction()) 

secondFunction =() => { 
    console.log(this.state.myState); 
} 

當我的回調函數具有括號:()控制檯將記錄未定義或只是當我從電話中的括號去掉後面像這樣看來工作:

setState({ 
    myState:myState 
},secondFunction) 

我是新來的反應,以便如果有人可以給我爲什麼有括號使得在函數被調用的順序將是非常有益不同的解釋!

回答

3

原因是,你想要一個function得到調用一次setState完成它的任務,意味着它期待的功能,但是當你使用()意味着你不能傳遞一個function,要調用function

寫同樣的事情的其他方式是:secondFunction和secondFunction()之間

setState({ 
    myState:myState 
},() => secondFunction()) 

setState({ 
    myState:myState 
}, function(){ secondFunction() }) 

差異:

secondFunction返回一個函數體secondFunction()將返回結果的功能

檢查這個片段:

function abc(){ 
 
    return 'Hello' 
 
} 
 

 
console.log("body", abc); 
 

 
console.log("result", abc());

+0

都清楚的感謝! –

1

setState需要一個回調函數。

如果添加了括號()您呼叫的功能secondFunction並通過一切可能返回作爲第二個參數setState。你的函數不返回任何東西,因此undefinednothing

你想要做的是傳遞函數本身(所以它可以稍後調用),這是沒有括號完成。