亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

vue從vue外部導入數據在組件中使用,是否需要深拷貝

vue從vue外部導入數據在組件中使用,是否需要深拷貝

慕森卡 2023-05-25 16:47:41
想象一下,我有一個帶有多個道具的對象,我想將其帶入各種 vue 組件的“數據”狀態,作為一種起點或默認狀態。我希望每個組件都能夠從初始化的那一刻起管理自己的狀態。就像是:import { initialData } from '../../some-data.js'Vue.component('my-component', {  data: function () {    return {       ...initialData,       somethingElse: 'hello there",    }  },  template: 'Hi'})Vue 是否會對該對象進行深度復制,以便當它因用戶交互而發生變化時,原始對象(位于 some-data.js 中)將不會發生變化,或者我是否需要自己使用類似的方法來做到這一點:import { initialData } from '../../some-data.js'Vue.component('my-component', {  data: function () {    return {       ...JSON.parse(JSON.stringify(initialData)),       somethingElse: 'hello there'    }  },  template: 'Hi'})
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

Vue 會深拷貝這個對象嗎

拷貝?不,但是您將獲得該組件的淺表副本,因為您正在創建一個新對象(使用擴展語法)。

與任何淺拷貝一樣,如果initialData包含對象,那么這些對象將不會被深拷貝,但頂層字符串和數字(等)將被拷貝。


用來JSON.parse做深拷貝是一種黑客攻擊。最好使用像 lodash 這樣的專用深拷貝方法_.cloneDeep。或者你可以只寫initialData一個工廠函數:

const createInitialData = () => ({

? foo: 'bar',

? nestedObject: {

? ? blah: 12345

? }

})

data() {

? return {

? ? ...createInitialData(),

? ? somethingElse: 'hello there'

? }

}


查看完整回答
反對 回復 2023-05-25
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

為什么不嘗試看看會發生什么?

some-data.js在最后的文件中添加如下內容:

setInterval(function() { console.log(initialData) }, 1000);

然后當您導入它時,修改一些東西并查看日志會發生什么。

不管是哪種情況,您都應該使用 Vuex。


查看完整回答
反對 回復 2023-05-25
  • 2 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號