在React中,有一個很重要的概念叫做不可變性(immutability)。這個概念在處理狀態(state)和資料時非常關鍵,因為它直接影響到React的渲染(render)機制和效能。以下是對於為何我們在處理資料時需要將它暫存成一份,特別是對於物件型別資料的解釋。
const obj1 = { name: 'Alice' };
const obj2 = obj1;
obj2.name = 'Bob';
console.log(obj1.name); // 輸出: 'Bob'
在上述範例中,obj1和obj2指向同一個物件,因此改變obj2的內容會直接影響到obj1。
const [user, setUser] = useState({ name: 'Alice' });
// 直接修改物件的屬性
user.name = 'Bob';
setUser(user); // React 不會偵測到變化
上面的範例中,由於user的記憶體位址沒有改變,React無法知道我們改變了user的內容,因此不會觸發重新渲染。為了解決這個問題,我們需要創建一個新的物件:
// 創建一個新物件
setUser({ ...user, name: 'Bob' }); // React 會偵測到變化並重新渲染
總結
在React中,處理物件型別的資料時,保持不可變性是至關重要的。這不僅確保了資料驅動畫面刷新的預期行為,也提高了React應用的效能和可預測性。透過創建新物件的方式來更新狀態,我們可以讓React精確地偵測到資料的改變並做出相應的重新渲染。