iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

在React中,有一個很重要的概念叫做不可變性(immutability)。這個概念在處理狀態(state)和資料時非常關鍵,因為它直接影響到React的渲染(render)機制和效能。以下是對於為何我們在處理資料時需要將它暫存成一份,特別是對於物件型別資料的解釋。

  1. 物件和陣列的傳參考特性
    在JavaScript中,物件和陣列是以傳參考(pass by reference)的方式處理。這意味著當你將一個物件或陣列賦值給另一個變數時,兩個變數實際上都指向相同的記憶體位址。換句話說,如果你改變了其中一個變數的內容,另一個變數也會同時受到影響。
const obj1 = { name: 'Alice' };
const obj2 = obj1;
obj2.name = 'Bob';
console.log(obj1.name); // 輸出: 'Bob'

在上述範例中,obj1和obj2指向同一個物件,因此改變obj2的內容會直接影響到obj1。

  1. 為什麼不可變性很重要?
    在React中,元件的重新渲染(re-render)是基於狀態(state)或屬性(props)改變來觸發的。React會透過淺比較(shallow comparison)來檢查物件的變化。如果我們直接修改一個物件(或陣列)的內容,而不創建一個新物件,那麼記憶體位址並沒有改變,React無法檢測到狀態的改變,導致畫面不會重新渲染。
const [user, setUser] = useState({ name: 'Alice' });

// 直接修改物件的屬性
user.name = 'Bob';
setUser(user); // React 不會偵測到變化

上面的範例中,由於user的記憶體位址沒有改變,React無法知道我們改變了user的內容,因此不會觸發重新渲染。為了解決這個問題,我們需要創建一個新的物件:

// 創建一個新物件
setUser({ ...user, name: 'Bob' }); // React 會偵測到變化並重新渲染
  1. 預期行為和效能的考量
    通過遵循不可變性的原則,我們可以保證每次狀態改變時都會觸發React的重新渲染,這使得UI總是保持與狀態同步。此外,不可變性還能提升應用的效能,因為它允許React使用更有效率的算法(如淺比較)來確定哪些部分需要重新渲染。

總結
在React中,處理物件型別的資料時,保持不可變性是至關重要的。這不僅確保了資料驅動畫面刷新的預期行為,也提高了React應用的效能和可預測性。透過創建新物件的方式來更新狀態,我們可以讓React精確地偵測到資料的改變並做出相應的重新渲染。


上一篇
[Day 2] 溫習篇!JavaScript ES6 基礎
下一篇
[Day 4] 從jsx模板中學習甚麼是表達式
系列文
讀書筆記&心得:React 思維進化:一次打破常見的觀念誤解,躍升專業前端開發者6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言