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!)

所有畫面綁定會 ❌ 不會自動更新,而且還會報錯!