簡單易懂的React魔法(11):使用setState改變組件狀態

和props不同,一個組件的state可以隨時被改變,這些狀態將保存到組件被銷毀。話雖如此,你應該小心地改變組件的狀態不然你會遇到問題。
為什么要小心?好吧,你要知道改變一個組件的state或者props會自動調用重新渲染頁面,所以新的值會反映在界面中。意味著頻繁的更改將使你的代碼運行緩慢,這會大大降低用戶體驗。
React有特殊的更新state方法被稱為setState()它將新值合并到現有值中然后觸發重新渲染。所以修改我們的buttonClicked()方法使它在修改名字的同時保持國家不變:
src/pages/Detail.js

buttonClicked() {
    const newState = {
        name: chance.first()
    };

    this.setState(newState);
}

注意我已經去掉了對 this.forceUpdate()的調用 – 現在不需要了. 實際上,調用 forceUpdate()只在React沒有察覺到一個深度state變化時調用,所以我們現在不需要它了。

新的代碼完全實現了我們的想法: 它創建一個新的狀態 newState它含有新的姓名, 然后通過調用 this.setState()用來改變組件的state. 因為state的改變自動出發重新渲染, 你會在每次點擊按鈕時看到一個新的名稱,但國家不變。

在極端情況下你設置了太多的state或props變化,不停地調用render()會使頁面反應緩慢,react有個解決辦法:如果你創建了一個方法shouldUpdateComponent()然后返回false,你的組件就不會被重新渲染。

為了使用這個方法,你要么可以放一些業務邏輯在shouldUpdateComponent()按照你的需要返回true或者false。或者總是返回false然后調用this.forceUpdate()來重新渲染頁面。這個方法會強制調用render即使shouldUpdateComponent()返回false。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 做React需要會什么? react的功能其實很單一,主要負責渲染的功能,現有的框架,比如angular是一個大而...
    蒼都閱讀 14,816評論 1 139
  • 原教程內容詳見精益 React 學習指南,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,860評論 1 18
  • 本筆記基于React官方文檔,當前React版本號為15.4.0。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,804評論 14 128
  • 昨晚和家人一起在外面吃了一頓飯,孜然全雞里吃出了無數條雞腿,味道也很不新鮮,很明顯是把別人吃剩的拼...
    時光走筆閱讀 520評論 0 0
  • 1比0之后,換發球。 顏雪峰作為一名經驗豐富的斗牛高手,經過上一次的試探,已經清楚知道面對著李逸風這防守的強度,自...
    RainyMorning閱讀 613評論 0 0