官方文檔bash
setState(updater[, callback]) updater就是一個函數,不包括()調用哦,就是一個reference。函數
updater以下:The first argument is an updater function with the signature:(state, props) => stateChangeui
const updater = (prevState, prevProps)=>{
return {counter: prevState.counter + prevProps.step};
}
複製代碼
即:this
const updater = (prevState,prevProps) => ({counter: prevState.counter + prevProps.step})
//注意:這裏是()不是{},ES6 shorthand格式,爲了區分code block。
複製代碼
即:spa
this.setState(
(prevState, prevProps)=>{
return {counter: prevState.counter + prevProps.step};
}
)
this.setState(
(prevState, prevProps)=>
( {counter: prevState.counter + prevProps.step};)
)
複製代碼
以上寫法,沒法等價於直接去掉prevState參數,可是爲什麼React又能夠這麼寫呢?由於這是React本身的定義而已。他在setState裏面處理了,而不是天然過渡的。看下面官網截圖。3d
this.setState(
{counter: prevState.counter + prevProps.step};
)
複製代碼
區別是若是用updater 函數的話,更新render是當即更新的。facebook的人說,若是state是基於上一個prevState的話,爲確保更新,反而推薦!code