vue中子組件改變數組或對象的值,使父組件不受影響


在vue中,父組件傳值給子組件通過,v-bind,眾所周知,子組件要想改變父組件傳的值,都要向父組件發送一下信號,即$emit(),但是我最近發現,有時候,子組件不emit,都可以改變父組件傳來的變量的值,哪怕把父組件傳的變量的值再賦值給另一個變量,改變該變量,也會改變父組件的對應變量的值,這是為啥呢,根據
vue 父子組件傳值 子組件修改父組件值的解決辦法中提到的,我才發現,原來

在 JavaScript 中對象和數組是引用類型,指向同一個內存空間,如果 prop 是一個對象或數組,在子組件內部改變它會影響父組件的狀態。

而我現在的需求是,在子組件改變變量的值,在父組件不會發生響應的改變,我是這樣做的
子組件

this.copyScreenList = new Array()	//這樣賦值,在子組件改變值的時候,父組件不會響應改變
this.screenList.forEach(item => {	//screenList為父組件傳的變量
      let tempObj = {
            name: item.name,
            value: item.value,
            choose: item.choose
      }
      this.copyScreenList.push(tempObj)
})

這樣就等於,新開辟了一塊內存空間,用於放子組件的數組變量,但是不能這樣做哈

this.copyScreenList = new Array()	//這樣賦值,在子組件改變值的時候,父組件不會響應改變
this.screenList.forEach(item => {      //screenList為父組件傳的變量
      this.copyScreenList.push(item)
})

更不能這樣做

this.copyScreenList = new Array()	//這樣賦值,在子組件改變值的時候,父組件不會響應改變
this.copyScreenList = this.screenList

這樣都會導致新的變量指向同一個內存空間;
對象的改變也是這個道理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM