Vue.js的双向绑定原理

Vue的双向绑定

vue双向绑定是其最重要的核心亮点,其原理也很简单,这里做个简单总结

  • vue2的双向绑定是利用的Object.defineProperty
  • vue3的双向绑定是利用的
    ES6Porxy中的defineProperty(target, propKey, propDesc
    其作用类似于Object.defineProperty

下面写一下两种原理的简单代码

  • 用于直观展示双向绑定的视图层(view) html代码

    文档标题

  • vue2的双向绑定

    let obj={
    message:"12"
    }
    Object.defineProperty(obj,"message",{
    get:function(){
    return this._message
    },
    set:function(newValue){
    this._message=newValue
    document.getElementById("output").innerHTML=newValue
    }

    })

    document.getElementById("input").addEventListener('input',(event)=>{
    obj.message=event.target.value
    })

代码主要对对象的set过程进行劫持,将其与view层绑定

  • vue3的双向绑定

    let obj={
    message:"12"
    }
    const newObj=new Proxy(obj,{
    get:function(target,propKey,rev){
    return Reflect.get(target,propKey)
    },
    set:function(target,propKey,value){
    Reflect.set(target,propKey,value)
    document.getElementById("output").innerHTML=value
    }
    })

    document.getElementById("input").addEventListener('input',(event)=>{
    newObj.message=event.target.value
    })

  • 效果
    !

相关推荐
shadow_glory1 分钟前
vue3自定义指令directives
前端·javascript·vue.js
Front思2 分钟前
如何学习Shopify前端开发?
前端·学习
码云骑士4 分钟前
语音合成演示 - Web Speech API
前端
ZC跨境爬虫5 分钟前
跟着 MDN 学CSS day_50:(传统布局方法与网格系统)
前端·css·ui·tensorflow·媒体
薛先生_0998 分钟前
vue-路由模块封装
前端·javascript·vue.js
薛先生_0999 分钟前
vue-router-link实现导航高亮效果
前端·javascript·vue.js
郑州光合科技余经理10 分钟前
海外版外卖系统源码:支付/地图/多语言核心代码实现
android·java·前端·后端·架构·uni-app·php
古韵22 分钟前
TanStack Query 被高估了?这 5 个场景它真不如 alova
前端
颂love31 分钟前
Vue3基础入门
前端·学习·vue3
风吹夏回32 分钟前
Vue 3 路由使用完全指南
前端·vue.js