成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

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

vue初始化data方法有哪些

vue初始化data方法有兩種:1、object方式,語法“var data = { 鍵值對 }”;2、function方式,語法“data: function () {return { 鍵值對 }}”。需要注意組件和extend中的data初始化不能是Object,否則會報錯。組件中data用function方式是為了防止多個組件實例對象之間共用一個data,產生數據污染。

vue初始化data方法有哪些

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

vue data有兩種初始化的方式,function和object,但是這兩種情況適用場景有哪些?能不能通用?帶著這兩個問題咱們一起分析下

data初始化

// 代碼來源于官網示例  // 第一種定義方式 var data = { a: 1 }  // 直接創建一個實例 var vm = new Vue({   data: data })  // Vue.extend() 中 data 必須是函數 var Component = Vue.extend({ // 第二種定義方式   data: function () {     return { a: 1 }   } })
登錄后復制

上述代碼簡單描述了data定義的兩種方式

  • function

  • object

官網demo中也著重說了extend中data初始化不能用object。那么為什么呢?

源碼分析

按照官網demo,Vue.extend中的data初始化不能是Object,如果我們強制寫成Object會出現什么?

var Component = Vue.extend({   data: { a: 1 } })
登錄后復制

運行以后chrome的consolo直接報錯,信息如下

vue.esm.js?efeb:591 [Vue warn]: The "data" option should be a function that returns a per-instance value in component definitions.
登錄后復制

通過分析源碼以及報錯信息,當觸發Vue.extend的時候,他會做一個合并操作,把一個基礎組件(里面vmode, transtion等)和你定義在extend內的信息,通過mergeField往options上合并,當合并到data的時候,他會觸發strats.data,在這個里面會check data是不是一個function,這里需要注意的是filter、components等和data走的是兩套合并流程,詳細的請看代碼注釋,如下

// vue.extend 源碼地址https://github.com/vuejs/vue/blob/dev/src/core/global-api/extend.js    Vue.extend = function (extendOptions: Object): Function {   ...   // 在這里會觸發mergeOptions方法   Sub.options = mergeOptions(       Super.options,       extendOptions     )   ... }  // mergeOptions 源碼地址https://github.com/vuejs/vue/blob/dev/src/core/util/options.js  export function mergeOptions (   parent: Object,   child: Object,   vm?: Component ): Object {   ...    const options = {}   let key   // parent對象內包含components、filter,、directive   for (key in parent) {     mergeField(key)   }   // child對象內對應的是Vue.extend內定義的參數   for (key in child) {     if (!hasOwn(parent, key)) {       mergeField(key)     }   }   function mergeField (key) {   // 這一步是根據傳入的key找到不同的合并策略filter、components、directives用到合并策略是這個方法mergeAssets和data用到的不一樣,當合并到data的時候會進入專屬的合并策略方法內     const strat = strats[key] || defaultStrat     options[key] = strat(parent[key], child[key], vm, key)   } }  // strats.data  源碼地址https://github.com/vuejs/vue/blob/dev/src/core/util/options.js strats.data = function (   parentVal,   childVal,   vm ) {   if (!vm) {   // 如果data不是function的話會直接走下面的報錯信息     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定義為一個對象,因為他們底層都調用了mergeOptions方法

什么時候可以定義成一個對象

在vue初始化的時候,如下

new Vue({   data: {     linke: '//sinker.club'   } })
登錄后復制

意義

ok,上面說了那么多,那么這么做的意義是什么?為什么那幾種情況不可以定義為對象? 其實回答這個問題,需要回到js本身,眾所周知js數據類型分為引用和基本,引用類型包含Object, Array, Function,何為引用類型就不在這里闡述了

  var obj = {link: '//www.sinker.club'}   var obj2 = obj   var obj3 = obj   obj2.link = "//gitlab.sinker.club"   console.log(obj3.link) // "//gitlab.sinker.club"
登錄后復制

上述代碼反應了一個問題,由于obj3和obj2在內存中都是指向一個地址,那么obj2的修改會影響到obj3,當然處理這種問題可以用深copy來做到

  • JSON.parse(JSON.stringify(obj))

  • deepClone(obj)

但是這兩種做法需要開發或者框架每一次都要深copy一次,當數據量大的時候對性能什么都不友好,那么Vue怎么做的呢?把data定義成一個function

function data() {   return {    link: '//sinker.club'   } }  var obj = test() var obj2 = test()  obj2.link ="//gitlab.sinker.club" console.log(obj.link) '//sinker.club'
登錄后復制

為什么這么做?解決的場景是什么呢?

比如我定一個子組件,data是按照對象的方式定義的,這個組件在多個地方引用,如果其中一個引用此組件的data修改了,那么就會造成其余引用此組件的data同時改變, end.

擴展知識:

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方法有哪些

說明:

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

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

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

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

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
天天做日日做天天添天天欢公交车| 特大肥女BBWASS| 色综合伊人色综合网站 | 天天做天天爱夜夜爽| 亚洲AV成人无码| 亚洲中文字幕无码AV正片| 中文字幕在线不卡一区二区| 被老头一个晚上做了6次| 国产69精品久久久久777| 国产午夜精品一区二区三区极品| 久久国产精品无码网站| 欧美成人一区二区三区在线视频| 日本边添边摸边做边爱喷水| 无码人妻视频一区二区三区| 亚洲日韩AV无码中文| 99久久精品国产一区二区三区| 大荫蒂又大又长又硬又紧又粗| 国产无套码AⅤ在线观看| 久久精品国产一区二区三区不卡| 欧美精品成人久久AV爱乃娜美| 少妇无力反抗慢慢张开双腿| 亚洲精品色午夜无码专区日韩| 337P粉嫩胞人体高清视频免费| 夫妇交换聚会群4P疯狂大战视频| 好男人观看免费视频2019| 免费看国产曰批40分钟| 人人妻人人澡人人| 亚洲AV无码久久精品色欲| 2019NV天堂香蕉在线观看| 妇女强高潮18ⅩXXX| 精品亚洲成a人无码成a在线观看| 欧美熟妇精品视频网免费观看| 无码国产偷倩在线播放| 荫蒂每天被三个男人添视频| 非洲黑人狂躁日本妞| 精品无码久久久久久久久水蜜桃 | 亚洲另类春色国产精品| MM1313亚洲精品无码又大又| 国产亚洲精品第一综合麻豆| 男人J放进女人P全黄动态图| 午夜不卡久久精品无码免费| 中日双语字幕高清在线观看| 国产成人精品人人做人人爽| 老头老太太GMBGMBGM| 色偷偷亚洲第一成人综合网址 | 亚洲 自拍 另类小说综合图区| 18禁美女裸身无遮挡免费网站| 国产精品天干天干有线观看| 蜜桃久久国产一区二区| 为什么放进去女的就老实了| 又大又长粗又爽又黄少妇毛片| 国产AV无码专区亚洲AV中文| 美女裸体无遮挡永久免费观看网站| 偷拍精品视频一区二区三区| 2020国产精品香蕉在线观看| 国产午夜精品免费一区二区三区| 欧美亚洲国产精品久久蜜芽直播 | 精品人妻大屁股白浆无码| 人妻少妇伦在线无码| 亚洲中字幕日产2021草莓| 国产成人AV综合色| 男人强撕开奶罩揉捏我奶头视频| 亚洲AV无码精品色午夜蛋壳 | 最新的美国ZOOM动物| 国产午夜成人免费看片APP| 强行破瓜稚嫩粗暴顶弄哭喊| 亚洲日产精品一二三四区| 国产成人无码AV在线影院| 欧美精品黑人粗大视频| 亚洲欧洲成人AV电影网| 国产AV无码专区亚洲AV桃花庵| 妺妺窝人体色WWW婷婷| 亚洲成AV人在线观看成年美女| 嗯~使劲~别停~高H漫画| 免费AV片在线观看无需播放器| 亚洲AV无码一区二区三区久久精| 岛国精品一区免费视频在线观看| 免费啪啪全程无遮挡60分钟| 亚洲精品国精品久久99热| 国产成人片一区在线观看| 欧美性XXXXX极品| 岳打开双腿开始配合交换| 国内精品伊人久久久久网站| 少妇高潮潮喷到猛进猛出小说| 99久久亚洲精品无码毛片| 久久久久亚洲精品无码网址蜜桃| 亚州熟妇无码AV线播放| 放荡的闷骚娇妻H| 欧美熟妇的性裸交| 中文在线官网在线| 久久精品露脸对白国产| 亚洲AV无码国产剧情| 国产成人亚洲精品无码影院BT | 亚洲欧洲成人AV电影网| 国产无套内射普通话对白| 少妇搡BBBBⅩXX搡BBB| 八戒八戒在线资源网| 年轻老师的滋味3在观整有限中字 年轻夫妻把小孩哄睡后开监控 | 无码成人H动漫在线网站| 成人精品天堂一区二区三区 | 久久香综合精品久久伊人| 亚洲精品无码久久千人斩| 国产亚洲美女精品久久久2020| 四十如虎的丰满熟妇啪啪| 成人伊人亚洲人综合网| 人妻聚色窝窝人体www一区91| 97电影九七电影理论片| 美女又大又黄WWW免费网站| 一出一进一爽一粗一大视频免费的| 精品少妇人妻AV免费久久洗澡| 亚洲AV无码国产精品色午夜字幕| 国产美女精品自在线拍免费| 无码国产成人午夜在线观看| 国产AV无码专区亚洲AWWW| 色噜噜AV亚洲色一区二区| 超碰人人澡人人胔| 日本护士OOXⅩXXHD| 菠萝蜜视频网在线WWW| 人妻少妇伦在线无码| 把腿张开老子CAO烂你 | 吃奶摸下激烈床震视频试看| 人妻中字视频中文乱码| 白嫖B站激活码2023| 人与畜禽交互MOUSE | 水蜜桃成视频人在线看| 粉嫩性色av一区二区三区| 少妇极品熟妇人妻无码| 国产成人无码3000部| 偷看娇妻在别人胯下沦陷小说| 国产精品VA在线播放我和闺蜜| 天堂俺去俺来也WWW色官网| 国产成人无码AV在线播放无广告| 无码免费一区二区三区| 国产情侣露脸高清在线| 亚洲AV无码久久久久久精品| 娇妻玩4P被3个男子伺候| 亚洲午夜国产精品无码| 久久亚洲精品国产精品| 中文字幕人妻无码乱精品| 女儿的朋友中字头| WWW.色五月.COM| 揉着我的奶从后面进去视频| 国产成人人综合亚洲欧美丁香花| 五月天天爽天天狠久久久综合| 含羞草传媒入口免费网站腾讯网 | 小13箩利洗澡无码视频网站| 国语对白做受XXXXX在线中国| 亚洲人成网站999久久久综合| 里番本子纯肉侵犯肉全彩无码| 97免费公开在线视频| 日本亚洲欧美一区二区麻豆| 公么大龟弄得我好舒服秀婷视频 | 大胆GOGO高清在线观看| 无码午夜成人1000部免费视频 | 国产精品一线二线三线精华液| 亚洲VA中文字幕无码久久不卡| 久久久国产精品ⅤA麻豆LL| 18亚洲AV无码成人网站国产| 日本动漫瀑乳H动漫啪啪免费| 国产精久久一区二区三区| 亚洲顶级裸体AV片| 麻花豆传媒剧国产MV免费天美| 白嫩光屁股BBBBBBBBB| 无码毛片一区二区三区本码视频| 狠狠躁天天躁日日躁欧美| 岳打开双腿开始配合交换| 人妻无码中文专区久久五月婷 | 从厨房到餐桌JOYCE| 亚洲 欧美 激情 小说 另类| 久久综合精品国产丝袜长腿| はるとゆき温泉旅馆攻略| 忘忧草WWW中文在线资源| 久久国产情侣露脸精品| H国产小视频福利免费视频| 婷婷五月综合缴情在线视频| 精品一区二区三区波多野结衣| 99久久精品无码一区二区三区 | 国产区精品一区二区不卡中文| 亚洲综合熟女久久久40P| 人人添人人妻人人爽频| 国产无遮挡18禁网站免费| 伊人久久综合无码成人网| 肉蒲团之极乐宝鉴| 精品人妻一区二区三区| WWW亚洲精品自慰一区二区| 亚洲 欧美 自拍 henhen| 免费无码又爽又刺激激情视频| 公司办公室的秘书3| 亚洲熟女成年三级中文字幕| 人人做人人澡人人爽欧美| 黑人大雞巴ⅩⅩⅩ| H无遮挡H无码黄3D漫画| 亚洲AV无码一区二区三区系列| 欧美成人免费全部观看| 国产熟女一区二区三区四区五区| 中文激情在线一区二区| 午夜爽爽爽男女污污污网站 | XXXX娇小10另类| 亚洲国产成人精品青青草原| 人妻一区二区三区Av毛片|