React setState仔細再看

官方文檔bash

  1. setState(updater[, callback]) updater就是一個函數,不包括()調用哦,就是一個reference。函數

  2. 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

相關文章
相關標籤/搜索