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

网站建设维护课件ppt网站多种语言是怎么做的

网站建设维护课件ppt,网站多种语言是怎么做的,做访问的公司网站,免费seo教程一、原始类型的值 原始类型的指的是: boolean、number、string、symbol、undefind和null等类型的值. 一、初识ref 为什么vue3需要对原始值的响应式做单独处理?因为Javascript中的Proxy只能代理对象类型的数据, 如普通对象、数组、Set、Map等。 为了解决Proxy不能代理原始类…

一、原始类型的值

原始类型的指的是: booleannumberstringsymbolundefindnull等类型的值.

一、初识ref

为什么vue3需要对原始值的响应式做单独处理?因为Javascript中的Proxy只能代理对象类型的数据, 如普通对象、数组、Set、Map等。 为了解决Proxy不能代理原始类型的问题,vue3使用对象类型包裹原始类型的方法,也就是提供一个ref函数,如下是ref函数的简单实现:

function ref(val) {const wrapper = {value: val}return reactive(wrapper)
}const count = ref(1)
count++

这就是使用ref创建的响应式数据时要加.vlaue访问的原因,因为在ref函数中使用了对象类型 包裹 原始类型,然后使用reactive将包裹对象变成响应式数据并返回。实际上vue3源码对ref的实现做了很多抽象和封装并对不同类型的数据做了严格的逻辑判断,想要更深一步的了解ref可自行阅读vue3 ref 相关源码,在此就不过多赘述了。

二、模板中自动脱ref

为了减轻开发者的心智负担,vue3在模板访问和设置ref时实现了自动脱ref,自动脱ref需要对包裹对象添加唯一标识,这个唯一标识就是在包裹对象上添加一个__v_isRef只读属性,它用来判断一个对象是否为ref。我们需要修改一下ref函数的实现:

function ref(val) {const wrapper = {value: val}Object.definePrototype(wrapper, '__v_isRef',{value: ture})return reactive(wrapper)
}

Object.definePrototype为对象配置属性通常会用到三个描述符

  1. configurable 默认值为false 也就是不可配置
  2. writable 默认值为false 也就是不可写
  3. enumerable 默认值为false 也就是不可枚举 ,即for…in访问不到该属性

自动脱ref函数的简单实现

function proxyRefs(objectWithRef) {return new Proxy(objectWithRef, {get(target, key) {return unref(target)},set(target, key, value, receiver) {const oldValue = target[key]if (isRef(oldValue) && !isRef(value)) {oldValue.value = valuereturn true} else {return Reflect.set(target, key, value, receiver)}}})
}function unref(ref) {return isRef(ref) ? ref.value : ref
}function isRef(r) {return !!(r && r.__v_isRef === true)
}

三、解决响应式丢失问题

ref除用来为原始值提供响应式方案,还可以解决响应式丢失的问题,比如下面的一个例子:

<template><div>{{ count }}</div>
</template><script>
//
import { reactive } from 'vue'export default {setup() {const proxy = reactive({ count: 1 })setTimeout(() => {proxy.count++}, 3000)return {...proxy}}
}
</script>

运行上述代码,定时器3s后会修改响应式数据的值但模板中的数据并未更新,其根本原因出在...操作符上

return {...proxy
}

等价于:

return {count: 1
}

返回的是一个普通对象,所以在模板中读取该对象的属性时不会与渲染函数建立联系,修改proxy的属性时自然也不会触发渲染函数的再次执行。故此toReftoRefs函数就应运而生,下面是toRef和toRefs函数的简单实现:

function toRef(target, key) {const wrapper = {get value() {return target[key]},set value(value) {target[key] = value}}Object.definePrototype(wrapper, '__v_isRef',{value: ture})return wrapper
}function toRefs(target) {const result = {}for (const key in target) {result[key] = toRef(target, key)	}return result
}

故此我们只要修改script中的一行代码就可以避免响应式的丢失了

return {...toRefs(proxy)
}
http://www.dtcms.com/a/530702.html

相关文章:

  • 湛江自助建站模板网站seo外链建设
  • 上海住房城乡建设厅网站工程机械外贸网站建设
  • 佛山网站建设专业定制如何制作网络
  • 推广网站挣钱如何将数据写入wordpress文站
  • 网站如何留住客户长沙旅游商贸职业技术学院
  • 网站建设实验周志与总结一般多少钱做一个网站
  • 网站建设商业计划书ai免费logo设计一键生成
  • 网站建设技术服务公司怎么建一个公司运营网站
  • 青海省公路建设管理局官方网站东莞常平做网站公司
  • 盐城建设局网站中小型电子商务网站
  • 游戏界面设计网站贵阳手机银行app下载
  • 做封面的免费网站网站的建设主题
  • 个人网站免费域名注册安徽省招投标中心官网
  • 江苏中星建设集团网站虚拟产品货源网站
  • 网站手机客户端在线制作网站设计制作费
  • 员工入职 在哪个网站做招工汕头市广州新业建设有限公司网站
  • 白云品牌型网站建设山东省和城乡建设厅网站
  • 艺客网站首页怎么设置网址
  • 商务网站建设与运营陕西省城乡建设学校网站
  • aspcms 网站栏目管理网络工程师都考什么
  • 优秀门户网站欣赏深圳网站建设亿联时代
  • 公司做网站哪里做个人软件网站域名
  • 网站产品详情用哪个软件做的wordpress加速之gzip
  • 如何在局域网中做网站衡水高端网站建设
  • 泰通建设集团网站手机网站开发教程pdf
  • 福清建设银行网站南昌科技学院是几本大学
  • 医院网站建设技术方案如何查询网站打开速度变慢
  • 如何建立学校网站python cms系统
  • 淮北网站开发公司哈尔滨网络科技公司网站
  • 网站开发安全文档静态网站挂马