reactive的賦值方式 - daniel-qa/Vue GitHub Wiki
reactive的賦值方式
Object.assign
操作方式 | 是否保留 reactive? | 畫面會更新嗎? | 用途 |
---|---|---|---|
Object.assign(target, source) |
✅ 是 | ✅ 會 | 更新 reactive 的內容 |
target = source |
❌ 否 | ❌ 不會 | 替換整個物件,不推薦在 reactive 上用 |
💥 差異重點一句話:
🔄 Object.assign() 是「更新物件內容」;
🔁 直接給值(像 noticeForm = xxx)是「整個物件換掉」!
🧪 假設情境:
const noticeForm = reactive({
title: 'Hello',
body: 'World'
});
✅ 使用 Object.assign() 的效果:
const saved = { title: 'Hi', body: 'Everyone' };
Object.assign(noticeForm, saved);
👉 結果是:
noticeForm.title 變成 'Hi'
但 noticeForm 還是原本的 reactive 物件!
所有綁定 noticeForm 的地方(像是 v-model)都會自動更新!
❌ 直接賦值的錯誤方式:
const saved = { title: 'Hi', body: 'Everyone' };
noticeForm = saved; // 🚫 這會失敗!
👉 結果是:
noticeForm 被整個指向新的物件 saved
原本的 reactive 被拋棄了
Vue 無法再追蹤這個新物件了(因為它不是 reactive!)
所有畫面綁定會 ❌ 不會自動更新,而且還會報錯!