久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

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

vue組件中data為啥是函數

原因:防止多個組件實例對象之間共用一個data,產生數據污染;采用函數的形式,initData時會將其作為工廠函數都會返回全新data對象。當將組件中的data寫成一個函數,數據以函數返回值形式定義,這樣每復用一次組件,就會返回一份新的data,擁有自己的作用域,類似于給每個組件實例創建一個私有的數據空間,讓各個組件實例維護各自的數據。

vue組件中data為啥是函數

前端(vue)入門到精通課程,老師在線輔導:聯系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

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

一、實例和組件定義data的區別

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定義函數與對象的區別

上面講到組件data必須是一個函數,不知道大家有沒有思考過這是為什么呢?

在我們定義好一個組件的時候,vue最終都會通過Vue.extend()構成組件實例

這里我們模仿組件構造函數,定義data屬性,采用對象的形式

function Component(){   } Component.prototype.data = { 	count : 0 }
登錄后復制

創建兩個組件實例

const componentA = new Component() const componentB = new Component()
登錄后復制

修改componentA組件data屬性的值,componentB中的值也發生了改變

console.log(componentB.data.count)  // 0 componentA.data.count = 1 console.log(componentB.data.count)  // 1
登錄后復制

產生這樣的原因這是兩者共用了同一個內存地址,componentA修改的內容,同樣對componentB產生了影響。【學習視頻分享:vue視頻教程、web前端視頻】

如果我們采用函數的形式,則不會出現這種情況(函數返回的對象內存地址并不相同)

function Component(){ this.data = this.data() } Component.prototype.data = function (){     return {    count : 0     } }
登錄后復制

修改componentA組件data屬性的值,componentB中的值不受影響

console.log(componentB.data.count)  // 0 componentA.data.count = 1 console.log(componentB.data.count)  // 0
登錄后復制

vue組件可能會有很多個實例,采用函數返回一個全新data形式,使每個實例對象的數據不會受到其他實例對象數據的污染

三、原理分析

首先可以看看vue初始化data的代碼,data的定義可以是函數也可以是對象

源碼位置:/vue-dev/src/core/instance/state.js

function initData (vm: Component) {   let data = vm.$options.data   data = vm._data = typeof data === 'function'     ? getData(data, vm)     : data || {}     ... }
登錄后復制

data既能是object也能是function,那為什么還會出現上文警告呢?

別急,繼續看下文

組件在創建的時候,會進行選項的合并

源碼位置:/vue-dev/src/core/util/options.js

自定義組件會進入mergeOptions進行選項合并

Vue.prototype._init = function (options?: Object) {     ...     // merge options     if (options && options._isComponent) {       // optimize internal component instantiation       // since dynamic options merging is pretty slow, and none of the       // internal component options needs special treatment.       initInternalComponent(vm, options)     } else {       vm.$options = mergeOptions(         resolveConstructorOptions(vm.constructor),         options || {},         vm       )     }     ...   }
登錄后復制

定義data會進行數據校驗

源碼位置:/vue-dev/src/core/instance/init.js

這時候vm實例為undefined,進入if判斷,若data類型不是function,則出現警告提示

strats.data = function (   parentVal: any,   childVal: any,   vm?: Component ): ?Function {   if (!vm) {     if (childVal && typeof childVal !== "function") {       process.env.NODE_ENV !== "production" &&         warn(           'The "data" option should be a function ' +             "that returns a per-instance value in component " +             "definitions.",           vm         );       return parentVal;     }     return mergeDataOrFn(parentVal, childVal);   }   return mergeDataOrFn(parentVal, childVal, vm); };
登錄后復制

四、結論

根實例對象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號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩欧美中文在线观看| 婷婷亚洲五月| 婷婷中文字幕一区| 久久美女性网| 国产不卡人人| 国产在线观看91一区二区三区| 欧美激情综合| 久久精品99国产国产精| 丝袜美腿诱惑一区二区三区| 福利一区视频| 国产精品毛片久久| аⅴ资源天堂资源库在线| 国产精品1区| 久久中文字幕一区二区| 久久中文字幕一区二区| 国产精品久久久久久久久久久久久久久| 欧美a级一区二区| 免费看一区二区三区| 岛国av免费在线观看| 国产精品精品| 91亚洲成人| 欧美午夜精彩| 亚洲激情黄色| 日韩在线网址| 日韩av中文字幕一区| 久久精品xxxxx| www.九色在线| 色爱av综合网| 国产精品嫩草99av在线| 亚洲综合专区| 91午夜精品| 成人在线免费观看91| 韩国女主播一区二区三区| 久久精品电影| 婷婷亚洲综合| 蜜臀av在线播放一区二区三区| 日本va欧美va欧美va精品| 久久免费视频66| 在线免费观看亚洲| 蜜臀久久久99精品久久久久久| 日韩和欧美一区二区| 日本久久一区| 激情偷拍久久| 久久激情av| 免费观看日韩电影| 中文国产一区| 欧美一级二级视频| 99久久精品网站| 日韩在线高清| 成人在线免费观看91| 日韩精品高清不卡| 99国产成+人+综合+亚洲欧美| 日韩在线一区二区| 性色av一区二区怡红| 樱桃成人精品视频在线播放| 秋霞影院一区二区三区| 人人精品亚洲| 99视频精品全部免费在线视频| 国产成人在线中文字幕| 亚洲精品第一| 国产精品99一区二区三| 国产毛片一区| 91国内精品| 国产成人久久| 老司机免费视频一区二区三区| 亚洲三级精品| 涩涩av在线| 日韩免费视频| 香蕉精品久久| 国产欧美自拍| 日本高清不卡一区二区三区视频| 五月综合激情| 欧美在线亚洲综合一区| 精品三区视频| 亚洲国产一区二区在线观看| 日本一二区不卡| 国产精品视频一区二区三区四蜜臂| 亚洲激情久久| 免费欧美一区| 日韩在线观看中文字幕| 亚洲www啪成人一区二区| 美女高潮久久久| 欧美女激情福利| 久久精品99久久无色码中文字幕| 日韩区欧美区| 日韩精品一二三区| 国产精品天天看天天狠| 久久久久国产精品一区二区| 麻豆精品在线观看| 亚洲精品进入| 日韩av一二三| 国产一区二区三区不卡视频网站| 日韩一区电影| 国产精品毛片一区二区三区| 四虎精品永久免费| 精品视频一区二区三区四区五区| 日韩毛片视频| 日韩精品一页| 国产精品蜜芽在线观看| 成人免费网站www网站高清| 制服诱惑一区二区| 国产精品久久亚洲不卡| 成人久久久久| 国产麻豆一区二区三区精品视频| 国产精品久久久久久久久久妞妞| 欧美亚洲自偷自偷| 日本不卡不码高清免费观看 | 青青草91久久久久久久久| 国精品产品一区| 尤物精品在线| 国产婷婷精品| 麻豆传媒一区二区三区| 神马午夜久久| 日韩av一级片| 欧美日韩一区二区三区视频播放| 91精品国产自产在线观看永久∴| 国产乱码精品一区二区三区亚洲人| 久久久蜜桃一区二区人| 国产精品一区二区三区www| 在线看片国产福利你懂的| 欧美综合精品| 久久国产精品毛片| 欧美激情国产在线| 国产精品欧美一区二区三区不卡| 国产伦精品一区二区三区在线播放 | 欧美精品二区| 99视频精品视频高清免费| 亚洲一区二区免费在线观看| 98精品视频| 国产区精品区| 日韩福利视频导航| 91九色综合| 国产精品黑丝在线播放| 女生影院久久| 日韩综合一区二区| 国产欧美午夜| 国产成人精品免费视| 欧美aa在线视频| 韩国精品主播一区二区在线观看 | 91国语精品自产拍| 亚洲精品免费观看| 亚洲97av| 综合国产视频| 国产精品亚洲产品| 99亚洲精品| 99国产精品视频免费观看一公开| 91亚洲无吗| 午夜性色一区二区三区免费视频| 91欧美国产| 欧美啪啪一区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产精品**亚洲精品| 国产亚洲精品美女久久| 国产伦乱精品| 毛片在线网站| 成人三级高清视频在线看| 91亚洲国产成人久久精品| 国产美女高潮在线| 日韩精品看片| 五月天激情综合网| 日韩欧美中文在线观看| 国产欧美88| 欧美在线观看天堂一区二区三区| 日韩高清成人在线| 成人一区而且| 国产精品三上| 免费在线观看成人| 国产欧美日韩一区二区三区在线| 国产九一精品| 亚洲精选成人| 国产精品一区二区三区四区在线观看| 国产精品igao视频网网址不卡日韩| 日韩精品水蜜桃| 少妇久久久久| 欧美性感美女一区二区| 91精品国产福利在线观看麻豆| 久久国产精品成人免费观看的软件| 亚洲少妇一区| 日韩在线成人| 美女视频黄久久| 夜夜嗨av一区二区三区网站四季av| 美女尤物久久精品| 日韩欧美中文字幕在线视频| 91亚洲国产成人久久精品| 91九色精品| 亚洲精品美女91| 亚洲天堂资源| 欧美中文字幕一区二区| 一区二区三区午夜视频| 高清日韩中文字幕| 久久精品99久久无色码中文字幕| 日韩在线a电影| 久久99视频| 国产精品原创| 91精品国产自产观看在线| 蜜桃av.网站在线观看| 在线一区二区三区视频| 久久久久亚洲精品中文字幕| 性欧美xxxx免费岛国不卡电影| 天堂精品久久久久|