当前位置: 首页 > news >正文

张家界建设网站制作城口网站建设

张家界建设网站制作,城口网站建设,河北seo技术交流,石家庄最新轨迹Vue3的响应式原理解析 Vue2响应式原理回顾 // 1.对象响应化#xff1a;遍历每个key#xff0c;定义getter、setter // 2.数组响应化#xff1a;覆盖数组原型方法#xff0c;额外增加通知逻辑 const originalProto Array.prototype const arrayProto Object.create(orig…Vue3的响应式原理解析 Vue2响应式原理回顾 // 1.对象响应化遍历每个key定义getter、setter // 2.数组响应化覆盖数组原型方法额外增加通知逻辑 const originalProto Array.prototype const arrayProto Object.create(originalProto);[push, pop, shift, unshift, splice, reverse, sort].forEach(method {arrayProto[method] function () {originalProto[method].apply(this, arguments)notifyUpdate()}}) function observe (obj) {if (typeof obj ! object || obj null) {return}// 增加数组类型判断若是数组则覆盖其原型if (Array.isArray(obj)) {Object.setPrototypeOf(obj, arrayProto)} else {const keys Object.keys(obj)for (let i 0; i keys.length; i) {const key keys[i]defineReactive(obj, key, obj[key])}} } function defineReactive (obj, key, val) {observe(val) // 解决嵌套对象问题Object.defineProperty(obj, key, {get () {return val},set (newVal) {if (newVal ! val) {observe(newVal) // 新值是对象的情况val newValnotifyUpdate()}}}) } function notifyUpdate () {console.log(页面更新!) } vue2响应式弊端 响应化过程需要递归遍历消耗较大 新加或删除属性无法监听 数组响应化需要额外实现 Map、Set、Class等无法响应式 修改语法有限制 Vue3响应式原理剖析 vue3使用ES6的Proxy特性来解决这些问题。 function reactive (obj) {if (typeof obj ! object obj ! null) {return obj}// Proxy相当于在对象外层加拦截// http://es6.ruanyifeng.com/#docs/proxyconst observed new Proxy(obj, {get (target, key, receiver) {// Reflect用于执行对象默认操作更规范、更友好// Proxy和Object的方法Reflect都有对应// http://es6.ruanyifeng.com/#docs/reflectconst res Reflect.get(target, key, receiver)console.log(获取${key}:${res})return res},set (target, key, value, receiver) {const res Reflect.set(target, key, value, receiver)console.log(设置${key}:${value})return res},deleteProperty (target, key) {const res Reflect.deleteProperty(target, key)console.log(删除${key}:${res})return res}})return observed } //代码测试 const state reactive({foo: foo,bar: { a: 1 } }) // 1.获取 state.foo // ok // 2.设置已存在属性 state.foo fooooooo // ok // 3.设置不存在属性 state.dong dong // ok // 4.删除属性 delete state.dong // ok嵌套对象响应式 测试嵌套对象不能响应 // 设置嵌套对象属性 react.bar.a 10 // no ok添加对象类型递归 // 提取帮助方法const isObject val val ! null typeof val objectfunction reactive (obj) {//判断是否对象if (!isObject(obj)) {return obj}const observed new Proxy(obj, {get (target, key, receiver) {// ...// 如果是对象需要递归return isObject(res) ? reactive(res) : res},//...}避免重复代理 重复代理比如 reactive(data) // 已代理过的纯对象 reactive(react) // 代理对象 解决方式将之前代理结果缓存get时直接使用 const toProxy new WeakMap() // 形如obj:observedconst toRaw new WeakMap() // 形如observed:objfunction reactive (obj) {//...// 查找缓存避免重复代理if (toProxy.has(obj)) {return toProxy.get(obj)}if (toRaw.has(obj)) {return obj}const observed new Proxy(...)// 缓存代理结果toProxy.set(obj, observed)toRaw.set(observed, obj)return observed}// 测试效果console.log(reactive(data) state)console.log(reactive(state) state)✨原创不易还希望各位大佬支持一下\textcolor{blue}{原创不易还希望各位大佬支持一下}原创不易还希望各位大佬支持一下 点赞你的认可是我创作的动力\textcolor{green}{点赞你的认可是我创作的动力}点赞你的认可是我创作的动力 ⭐️ 收藏你的青睐是我努力的方向\textcolor{green}{收藏你的青睐是我努力的方向}收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富\textcolor{green}{评论你的意见是我进步的财富}评论你的意见是我进步的财富
http://www.sadfv.cn/news/86840/

相关文章:

  • app网站开发流程图大气集团网站模板
  • 自己建立公司网站网站建设三合一
  • 免费私人网站建设平台网站显示建设中
  • 广告营销网络优化工程师主要负责什么工作
  • 营销网站建设模板html编辑器推荐
  • 图书类网站开发的背景福州有名的公司网站设计
  • 公司做网站的流程作图的步骤商城网站的基本功能
  • 公司网站集资网站开发人员犯法么网站建设需要多少内存
  • 网站的开发与建设wordpress getfooter
  • 网站建设报价单 文库青岛网站制作辰星辰
  • 天津制作网站宁波seo关键词优化教程
  • 兼职网站排行h5网站设计欣赏
  • dw可以做h5网站网站建设销售客户疑问
  • 做特卖网站广告策划案优秀案例
  • 服务器网站建设教程视频教程wordpress 文章 标题
  • 个人电子商务网站建设百度商标查询
  • 美食电子商务网站建设策划书分析网易严选网站开发
  • 如何在阿里云上建设网站十大app软件下载
  • 花卉市场网站建设基本步骤网站建设最难的是什么
  • 自己做公司网站成本wordpress怎么入驻写模板
  • 创新的中小型网站建设源码下载网站有哪些
  • 企业营销网站的建设荣盛科技网站建设
  • 商丘市做网站的公司寿光住房和城乡建设局网站
  • 昆山装饰公司网站建设网站做APP麻烦吗
  • 招聘网站建设策划书芜湖市住房和城乡建设厅网站首页
  • 搜狐快站图片瀑布流网站
  • 蚌埠网站优化制作公司万能搜索
  • 怎样做艾条艾柱网站建站行业span分析
  • 南昌网站建设公司渠道优惠券网站怎么做代理
  • 郑州做网站锐金寨县重点工程建设管理局网站