站長資訊網
最全最豐富的資訊網站

vue組件中data不能是函數嗎

不是,vue組件中data必須是一個函數。vue中組件是用來復用的,為了防止data復用,將其定義為函數。vue組件中的data數據都應該是相互隔離,互不影響的,組件每復用一次,data數據就應該被復制一次,之后,當某一處復用的地方組件內data數據被改變時,其他復用地方組件的data數據不受影響,就需要通過data函數返回一個對象作為組件的狀態。

vue組件中data不能是函數嗎

本教程操作環境:windows7系統、vue3版,DELL G3電腦。

vue實例的時候定義data屬性既可以是一個對象,也可以是一個函數

const app = new Vue({     el:"#app",     // 對象格式     data:{         foo:"foo"     },     // 函數格式     data(){         return {              foo:"foo"         }     } })
登錄后復制

但,組件中定義data屬性,只能是一個函數

如果為組件data直接定義為一個對象

Vue.component('component1',{     template:`<div>組件</div>`,     data:{         foo:"foo"     } })
登錄后復制

則會得到警告信息

vue組件中data不能是函數嗎

警告說明:返回的data應該是一個函數在每一個組件實例中

為什么data屬性是一個函數而不是一個對象?

Vue組件中data屬性不能為對象原因是對象是引用類型,組件會被多個實例同時引用導致的結果就是多個實例共享一個對象,其中一個組件改變了data對象中的值,其他實例也會受到影響。

如圖所示,組件復用后,隨機點擊其中一個組件中的按鈕其他兩個組件的數值也會受到影響

vue組件中data不能是函數嗎

vue組件data為函數的原因:data為函數,通過return返回對象,可以實現每個實例都有自己獨立的對象,實例之間互不影響;如下圖所示

vue組件中data不能是函數嗎

結論

根實例對象data可以是對象也可以是函數(根實例是單例),不會產生數據污染情況

組件實例對象data必須為函數,目的是為了防止多個組件實例對象之間共用一個data,產生數據污染。采用函數的形式,initData時會將其作為工廠函數都會返回全新data對象

說明:

  • vue中組件是用來復用的,為了防止data復用,將其定義為函數。

  • vue組件中的data數據都應該是相互隔離,互不影響的,組件每復用一次,data數據就應該被復制一次,之后,當某一處復用的地方組件內data數據被改變時,其他復用地方組件的data數據不受影響,就需要通過data函數返回一個對象作為組件的狀態。

  • 當我們將組件中的data寫成一個函數,數據以函數返回值形式定義,這樣每復用一次組件,就會返回一份新的data,擁有自己的作用域,類似于給每個組件實例創建一個私有的數據空間,讓各個組件實例維護各自的數據。

  • 當我們組件的date單純的寫成對象形式,這些實例用的是同一個構造函數,由于JavaScript的特性所導致,所有的組件實例共用了一個data,就會造成一個變了全都會變的結果。

(學習視頻分享:web前端開發、編程基礎視頻)

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产看午夜精品理论片| 国内精品视频一区二区三区八戒| 国产精品国产三级国产AV麻豆| 国内精品伊人久久久久影院对白 | 国产精品网站在线观看| www亚洲精品少妇裸乳一区二区| 国产精品高清一区二区三区不卡| 黑人无码精品又粗又大又长 | 久久精品国产久精国产思思| 香蕉依依精品视频在线播放| 亚洲精品乱码久久久久久V| 久久99国产精品99久久| 日韩毛片一级好特黄| 99精品众筹模特私拍在线| 99精品一区二区三区| 精品福利一区二区三区| 国产精品福利久久香蕉中文| 91精品国产一区| 91精品国产高清久久久久久io| 亚洲av无码成人精品区在线播放| 日韩高清特级特黄毛片| 国产精品中文久久久久久久| 久久99精品综合国产首页| 久久99精品久久久久久噜噜| 国产精品美女久久久久AV福利| 精品国产一区二区三区久| 麻豆文化传媒精品一区二区| 人妻少妇精品一区二区三区| 国产av一区二区三区日韩| 国产精品自产拍在线观看| 91精品福利视频| 538精品视频在线观看| 98精品国产高清在线看入口| 人妻少妇精品视中文字幕国语| 久久国产精品波多野结衣AV| 久久99热久久99精品| 骚片AV蜜桃精品一区| 午夜精品久久久久久中宇| 久久久久久一区国产精品| 在线私拍国产福利精品| 亚洲精品日韩专区silk|