日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

vue自定義組件引入不生效,vue中data為什么必須是函數(shù)

vue中data為什么必須是函數(shù)

vue自定義組件引入不生效,vue中data為什么必須是函數(shù)


vue中data必須是函數(shù)是為了保證組件的獨(dú)立性和可復(fù)用性 , data是一個(gè)函數(shù),組件實(shí)例化的時(shí)候這個(gè)函數(shù)將會(huì)被調(diào)用 , 返回一個(gè)對(duì)象,計(jì)算機(jī)會(huì)給這個(gè)對(duì)象分配一個(gè)內(nèi)存地址,你實(shí)例化幾次,就分配幾個(gè)內(nèi)存地址,他們的地址都不一樣 , 所以每個(gè)組件中的數(shù)據(jù)不會(huì)相互干擾,改變其中一個(gè)組件的狀態(tài) , 其它組件不變 。
vue自定義組件引入不生效ajax里面參數(shù):data 表示 你要傳遞的參數(shù)URL 表示, 你要請(qǐng)求的路徑type 表示, 什么類型, 比如 jsonsuccess 表示, 如果成功的話 執(zhí)行進(jìn)入這個(gè)函數(shù), 這個(gè)success里面的data表示你請(qǐng)求的這個(gè)URL返回的數(shù)據(jù)還有error 表示錯(cuò)誤執(zhí)行什么.等等
vue 中的 data 為什么是函數(shù)new Vue() 實(shí)例中,data可以是直接是一個(gè)對(duì)象,為什么在vue組件中 , data必須是一個(gè)函數(shù)呢?
因?yàn)榻M件是可以復(fù)用的 , js里對(duì)象是引用關(guān)系,如果組件data是一個(gè)對(duì)象,那么子組件中的data 屬性值會(huì)相互污染,產(chǎn)生副作用 。
所以一個(gè)組件的data選項(xiàng)必須是一個(gè)函數(shù),因此每個(gè)實(shí)例可以維護(hù)一份被返回對(duì)象的獨(dú)立的拷貝,new Vue的實(shí)例是不會(huì)被復(fù)用的,因此不會(huì)存在以上問題 。
Vue實(shí)例里面的data屬性為什么用函數(shù)返回其實(shí)vue上有提到
這樣會(huì)使組件的每個(gè)實(shí)例都有自己私有屬性data , 組件的實(shí)例屬性才不會(huì)被污染 。
試想下,
有對(duì)象myData,組件有實(shí)例A、B , 實(shí)例A和B的data綁定的是對(duì)象myData(隱含的意思是各個(gè)實(shí)例的data它們?cè)趦?nèi)存中指向的地址是一樣),當(dāng)更新實(shí)例A的myData的某個(gè)屬性的時(shí)候,因?yàn)閷?duì)象指向的內(nèi)存地址是同一個(gè),所以勢(shì)必影響到實(shí)例B
所以才需要data返回是一個(gè)函數(shù),函數(shù)返回一個(gè)新對(duì)象,這樣實(shí)例A和實(shí)例B綁定的data對(duì)象是兩個(gè)不同的對(duì)象
為什么vue中data必須是一個(gè)函數(shù)類比引用數(shù)據(jù)類型
Object是引用數(shù)據(jù)類型,如果不用function 返回,每個(gè)組件的data 都是內(nèi)存的同一個(gè)地址,一個(gè)數(shù)據(jù)改變了其他也改變了;
javascipt只有函數(shù)構(gòu)成作用域(注意理解作用域,只有 函數(shù)的{} 構(gòu)成作用域, 對(duì)象的{} 以及 if(){} 都不構(gòu)成作用域),data是一個(gè)函數(shù)時(shí),每個(gè)組件實(shí)例都有自己的作用域,每個(gè)實(shí)例相互獨(dú)立,不會(huì)相互影響
舉個(gè)?
如果兩個(gè)實(shí)例同時(shí)引用一個(gè)對(duì)象,那么當(dāng)你修改其中一個(gè)屬性的時(shí)候,另外一個(gè)實(shí)例也會(huì)跟著改;
兩個(gè)實(shí)例應(yīng)該有自己各自的域才對(duì),需要通過下面的方法來進(jìn)行處理
這樣么一個(gè)實(shí)例的data屬性都是獨(dú)立的,不會(huì)相互影響了.
所以,你現(xiàn)在知道為什么vue組件的data必須是函數(shù)了吧 。這都是因?yàn)閖s本身的特性帶來的,跟vue本身設(shè)計(jì)無關(guān) 。其實(shí)vue不應(yīng)該把這個(gè)方法名取為data(),應(yīng)該叫setData或其他更容易理解的方法名 。
【vue自定義組件引入不生效,vue中data為什么必須是函數(shù)】

    推薦閱讀