Vue3 (1)

一、vue2與vue3的區(qū)別

1、vue2創(chuàng)建實例

導入vue2
   <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.common.dev.js"></script>
創(chuàng)建vue2實例
 new Vue({
    // el:'#app' ,
    data:{
  name:"vue2",
  age:8
}
  }).$mount('#app')

2、vue3

導入vue3
 <script src="https://unpkg.com/vue@next"></script>

vue3創(chuàng)建一個實例:vue3里面的vue是一個對象,通過對象的createApp方法,創(chuàng)建一個vue實例

vue3中取消了el選項
vue3中,無論是組件還是vue實例,data選項必須的一個方法,由方法返回對象
        Vue.createApp({
            data() {
                return {
                    name:'vue3',
                    age :2
                }
            },

    }).mount('#app')

二、vue2和vue3響應式的區(qū)別

 <div id="app">
        <div> 學生信息:{{student}} </div>
        <button @click="student.name='李四'">修改姓名</button>
        <button @click="student.age++">修改年齡</button>
        <button @click="addSex">增加性別</button>
        <button @click="delName">刪除姓名</button>

        <div>食物:{{foods}}</div>
        <button @click="addFood">添加食物</button>
        <button @click="delFood">刪除食物</button>
    </div>

1、vue2的響應式

 <script>
       new Vue({
             el:"#app",
             data:{
                 student:{
                 name:"張三",
                    age:39},
              foods: ['蘋果', '香蕉', '橘子', '芒果', '西瓜']
                   },
        methods:{
           addSex(){ 
               this.$set(this.student,'sex','男')}
                 },
            addFood(){ 
                this.$set(this.foods,5,'櫻桃')}
                 },
         delName(){
                this.$delete(this.student,'name')
             },
          delFood(){
                this.$delete(this.foods,3)
               }
          }, 
            })

2、vue3的響應式

<script>
        Vue.createApp({
            data() {
                return {
                    student: {
                        name: '張三',
                        age: 23
                    },
                    foods: ['蘋果', '香蕉', '橘子', '芒果', '西瓜']
                }
            },
            methods: {
                addSex() {
                    this.student.sex = '男'
                },
                delName() {
                    delete this.student.name
                },
                addFood() {
                    this.foods[3] = '櫻桃'
                },
                delFood() {
                    this.foods[4] = ''
                }
            },
        }).mount('#app')
    </script>

三、vue2和vue3的響應式原理區(qū)別

<div id="app">
        <div id="name"></div>
        <div id="age"></div>
    </div>
1、vue2的響應式原理
 <script>
let obj3 = {
            name: '李四',
            age: 20
        }
 document.querySelector('#name').innerHTML = obj3.name
 document.querySelector('#age').innerHTML = obj3.age
//定義一個obj2對象,作為obj的代理對象
let obj2={}
//通過Object.defineProperty方法,給obj2,添加屬性
Object.defineProperty(obj2,'name',{
get(){ return obj.name },//讀取屬性的值,調(diào)用get方法
set(val){ obj.name=val
document.querySelector('#name').innerHTML = obj3.name
 }//設置屬性的值,調(diào)用set方法
})
 </script>
vue2在實例化時,會將data里面的所有數(shù)據(jù)采用Object.defineProperty進行處理,實現(xiàn)響應式,但是之后添加的數(shù)據(jù),由于沒有采用Object.defineProperty方法進行處理,所以不具備響應式。$set方法,內(nèi)部就是對單個屬性重新采用Object.defineProperty進行處理,從而具備響應式。
2、vue3的響應式原理
<div id="app">
        <div id="name2">{{name}}</div>
        <div id="age2">{{age}}</div>
    </div>

 <script>
        let obj3 = {
            name: '李四',
            age: 20
        }
        document.querySelector('#name2').innerHTML = obj3.name
        document.querySelector('#age2').innerHTML = obj3.age
//通過proxy創(chuàng)建一個代理對象
        let obj4 = new Proxy(obj3, {
            get(target, property) {
                // return target[property]
                return Reflect.get(target, property)
            },
            set(target, property, value) {
                // target[property]=value
                Reflect.set(target, property, value)
                document.querySelector(`#${property}2`).innerHTML = Reflect.get(target, property)
            },
            deleteProperty(target, property) {
                // return delete target[property]
                document.querySelector(`#${property}2`).remove()
                return Reflect.deleteProperty(target, property)
            }
        })
        Vue.createApp({


        }).mount('#app')
    </script>
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    極客學院Wiki閱讀 7,830評論 0 3
  • 不知不覺易趣客已經(jīng)在路上走了快一年了,感覺也該讓更多朋友認識知道易趣客,所以就謝了這篇簡介,已做創(chuàng)業(yè)記事。 易趣客...
    Physher閱讀 3,820評論 1 2
  • 雙胎妊娠有家族遺傳傾向,隨母系遺傳。有研究表明,如果孕婦本人是雙胎之一,她生雙胎的機率為1/58;若孕婦的父親或母...
    鄴水芙蓉hibiscus閱讀 3,911評論 0 2
  • 今天理好了行李,看到快要九點了,就很匆忙的洗頭洗澡,(心存一份念想,你總會打給我的??)然后把洗頭液當成沐浴液了??,...
    bevil閱讀 2,928評論 1 1
  • 那年我們15,像陽光一樣溫暖的年紀。每天我都會騎自行車上學,路過田野,工廠,醫(yī)院,村莊,有微風,有陽光,有綠...
    木偶說愛你閱讀 2,594評論 0 3

友情鏈接更多精彩內(nèi)容