在react中,修改狀態如果直接使用this.state,不會引起元件的重新渲染,需要通過 this.setstate來對元件的屬性進行修改。1、this.setstate的兩種定義方式
定義初始狀態
state =
如果此時有乙個按鈕,點選按鈕讓計數加1,我們可以有兩種寫法
(1)傳遞物件 this.setstate()(2)傳遞函式 this.setstate((state, props) => ())
2、setstate的兩種方式有什麼不同?
如果變更的state的值需要依賴於上一次的state的值,這種情況就需要用到函式的形式,比如以下這種情況
addcount())this.setstate()
this.setstate()
}
此時只會執行一次+1的操作,因為在react內部,會將多次setstate合併操作,新的state由 object.assgin({}, , ) 合併所得,以上賦值會執行三次,但因為count的值沒有更新,所以最終執行的結果只+1,如果setstate的賦值是函式,那情況就不一樣了
addcount()))this.setstate((state, props) => ())
this.setstate((state, props) => ())
}
這樣的操作會得到+3的效果,因為react會進行判斷,如果傳入的是函式,那麼將執行此函式,此時count的值就已經被修改了
3、setstate是同步還是非同步的?
☆☆☆☆☆ 是非同步的
(1) 即我們通過this.setstate修改了狀態之後,在它的下一行輸出state的值並不會得到新的值
(2) 為什麼是非同步?
有兩個原因,一是提高效率,每次修改state的值都會造成render的重新渲染,將多次修改state的值合併統一更新可以提高效能;二是render的更新會晚一些,如果render中有子元件,子元件的props依賴於父元件的state,props和state就不能保持一致
(3) 如何獲取非同步時的state值?
① 在setstate的**函式中,
this.setstate(, ()=>)
② 在componentdidupdate中獲取
componentdidupdate()
☆☆☆☆☆ 是同步的
(1) 即我們通過this.setstate修改狀態之後,在它的下一行輸出state是新的值
(2) 什麼場景下是同步的?
① 原生js獲取dom元素,並繫結事件
點我+1componentdidmount())
console.log(
this
.state.message)
})}
② 計時器 settimeout
this.addone() }>點我+1addone())
console.log(
this.state.count ) },0)
}
react中state與setstate的使用
我們可以利用state來定義一些變數的初始值 放在construcor裡 this.state 要更改state裡的值,注意要遵循react裡immutable規範,state不允許我們做任何改變,只能通過setstate來更改 const list this state.list list.spl...
React中setState為非同步機制
setstate用來更改state,並觸發render方法重新渲染頁面,這之間要經過react核心中diff演演算法比較dom樹,最終決定是否需要被渲染如何渲染。如何在第一時間獲取並應用setstate的值,set完第一時間呼叫方法即可獲取 如 this.setstate nowstate 便利 1...
React中setState修改深層物件
在react中經常會使用到setstate,因為在react生態中,state就是一切.在開發過程中,時長會在state中遇到一些比較複雜的資料結構,類似下面這樣的 state objb objc objd d 這時需要我們修改list中obja中的name屬性和objd的屬性,遇到這樣的情況我們一...