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

做网站要几个人 要多少钱北京网站设计开发公司

做网站要几个人 要多少钱,北京网站设计开发公司,相亲网站做推广的照片是谁,免费推广渠道有哪些文章目录 vue3 中 ref 和 reactivereactive 与 ref 不同之处ref 处理复杂类型ref在dom中的应用 vue3 中 ref 和 reactive ref原理 基本原理 ref是Vue 3中用于创建响应式数据的一个函数。它的基本原理是通过Object.defineProperty()#xff08;在JavaScript的规范中用于定义对… 文章目录 vue3 中 ref 和 reactivereactive 与 ref 不同之处ref 处理复杂类型ref在dom中的应用 vue3 中 ref 和 reactive ref原理 基本原理 ref是Vue 3中用于创建响应式数据的一个函数。它的基本原理是通过Object.defineProperty()在JavaScript的规范中用于定义对象属性的方法或者ProxyES6新特性用于创建对象的代理来实现数据的响应式。当数据被修改时它会触发更新相关的副作用函数例如更新DOM等操作。当使用ref创建一个响应式数据时它实际上返回一个包含value属性的对象。例如const count ref(0)这里的count是一个对象访问和修改数据需要通过count.value。 底层实现细节简单示例 以下是一个简单的模拟ref实现的代码简化版实际Vue 3代码更复杂 function ref(raw) {const r {get value() {track(r, value);return raw;},set value(newVal) {if (newVal! raw) {raw newVal;trigger(r, value);}}};return r; }这里的track函数用于收集依赖记录哪些函数依赖了这个ref数据trigger函数用于触发更新当数据改变时通知依赖的函数重新执行。 reactive原理 基本原理 reactive是基于Proxy对象来实现响应式的。Proxy可以拦截对目标对象的各种操作如读取属性、设置属性、删除属性等。当这些操作发生时reactive可以触发相应的更新逻辑。例如const state reactive({ count: 0 })对state.count的读取和修改都会被Proxy拦截从而实现响应式。 底层实现细节简单示例 以下是一个简单的模拟reactive实现的代码片段简化版 function reactive(target) {return new Proxy(target, {get(target, key, receiver) {track(target, key);return Reflect.get(target, key, receiver);},set(target, key, value, receiver) {const result Reflect.set(target, key, value, receiver);trigger(target, key);return result;}}); }同样这里的track和trigger函数用于收集依赖和触发更新和ref的原理类似但是reactive是针对整个对象的属性进行拦截。 ref和reactive的应用场景 ref应用场景 基本数据类型当处理基本数据类型如number、string、boolean的响应式数据时通常使用ref。例如一个计数器const count ref(0)这里count是一个ref对象通过count.value来访问和修改计数值。在组合式API中传递单个数据如果在组合式API函数之间传递一个简单的响应式数据ref是一个很好的选择。比如一个函数返回一个ref数据另一个函数可以接收并使用这个ref。 reactive应用场景 复杂对象类型对于复杂的对象如包含多个属性的对象或数组使用reactive更为合适。例如const state reactive({ name: John, age: 30, hobbies: [reading, coding]})对state对象中的任何属性的访问和修改都会是响应式的。多个相关数据的管理当需要管理一组相关的数据并且希望它们作为一个整体进行响应式处理时reactive是首选。比如一个表单数据对象包含表单的各个字段值使用reactive可以方便地处理整个表单数据的更新和响应。 应用要求/依据 响应式数据的修改原则 对于ref必须通过.value属性来修改数据才能触发响应式更新。例如count.value会触发更新而直接count new_value这里count是ref不会触发响应式更新。对于reactive直接修改对象的属性就可以触发响应式更新。如state.name Jane这里state是reactive对象会触发更新。 模板中的使用差异 在Vue 3的模板中ref的数据可以直接在模板中使用不需要额外的.value语法。例如div{{ count }}/div这里count是ref是可以正常工作的Vue会自动处理value属性的访问。而对于reactive对象直接通过属性访问即可如div{{ state.name }}/div这里state是reactive对象。 reactive 与 ref 不同之处 数据类型处理方式不同 ref 主要用于包装基本数据类型如number、string、boolean使其具有响应式特性。例如const count ref(0)count是一个对象它有一个value属性来存储实际的数据。在JavaScript代码中必须通过count.value来访问和修改这个数据。 reactive 用于处理复杂的对象类型如对象字面量或数组它会递归地将对象的所有属性转换为响应式。例如const state reactive({ count: 0, message: Hello})state本身就是响应式对象对state.count和state.message等属性的访问和修改都是响应式的不需要像ref那样通过特定的value属性来操作。 在模板中的使用差异 ref 在Vue 3模板中使用ref时不需要显式地访问value属性。Vue会自动进行解包例如如果count是一个ref在模板中可以直接写成div{{ count }}/div它会正确地渲染count.value的值。 reactive 对于reactive对象在模板中直接通过属性访问来使用。如const state reactive({ name: John})在模板中可以写成div{{ state.name }}/div来显示name属性的值。 响应式转换的深度不同 ref 只对它包装的那个数据本身进行响应式处理。如果ref包装了一个对象它不会自动将对象内部的属性也转换为响应式仍然需要通过value属性来访问对象并且如果要使对象内部属性具有响应式可能还需要进一步的处理如使用reactive来处理这个对象。 reactive 是深度响应式的。当使用reactive处理一个对象时它不仅会使对象本身的属性具有响应式还会递归地将对象内部嵌套的对象和数组的属性也转换为响应式。例如如果有一个对象const user reactive({ name: Alice, address: { city: New York, street: 123 Main St }})那么user.address.city的访问和修改也是响应式的。 创建和使用的语法及场景差异 ref 创建语法简单直接适用于单个数据值的响应式处理特别是基本数据类型。在组合式API中当需要从一个函数返回一个响应式数据并且这个数据是基本类型或者只需要简单的包装时ref是很好的选择。 reactive 创建时需要传入一个对象更适合处理复杂的、有多个相关属性的数据结构如应用程序中的状态对象。当有一组相关的数据需要作为一个整体进行响应式管理时如表单数据、应用的全局状态等reactive是更合适的方式。 ref 处理复杂类型 ref处理复杂类型 从功能上来说ref可以用来包装复杂的数据类型如对象或数组。例如可以使用ref创建一个包含多个属性的对象const myObject ref({name: John, age: 30})。 限制 访问方式的限制 在JavaScript代码中必须通过value属性来访问和修改包装后的复杂对象。例如要访问上述myObject中的name属性需要使用myObject.value.name。这与reactive不同reactive可以直接通过属性访问如const myReactiveObject reactive({name: Alice}); myReactiveObject.name。这种访问方式的差异可能会导致代码不够简洁直观尤其是在处理多层嵌套的复杂对象时。 响应式转换深度的限制 ref本身不会对包装的复杂对象内部进行深度的响应式转换。例如如果有一个ref包装的对象const user ref({name: Bob, address: {city: New York}})修改user.value.address.city不会自动触发响应式更新除非address这个对象本身也经过了响应式处理如使用reactive来处理address对象。而reactive会自动对对象内部进行深度响应式处理。 在模板中的限制部分 在Vue 3的模板中ref包装的复杂对象在某些情况下可能会引起混淆。虽然Vue会自动展开ref的值但对于复杂对象的属性访问有时候可能需要注意绑定的语法。例如如果要在模板中使用myObject中的name属性写成{{myObject.name}}是不行的需要写成{{myObject.value.name}}不过Vue在模板渲染时会自动处理ref的value属性使得在大多数简单情况下可以像使用普通数据一样使用ref包装的数据。但在复杂的模板绑定场景下还是要注意正确的语法。 ref在dom中的应用 应用实例 基本计数器示例 在Vue 3组件中可以使用ref来获取DOM元素并对其进行操作。以下是一个简单的计数器组件当点击按钮时计数器的值会增加并且会更新DOM中的显示内容。 templatedivp refcounterDisplay{{ count }}/pbutton clickincrementIncrement/button/div /templatescript import { ref, defineComponent } from vue; export default defineComponent({setup() {const count ref(0);const counterDisplay ref(null);const increment () {count.value;if (counterDisplay.value) {// 直接操作DOM元素的文本内容counterDisplay.value.textContent count.value;}};return {count,counterDisplay,increment};} }); /script表单验证示例 假设有一个简单的表单通过ref获取表单元素用于检查表单是否有效。 templateform refmyForminput typetext v-modelusernamebutton clickcheckFormValidityCheck Validity/button/form /templatescript import { ref, defineComponent } from vue; export default defineComponent({setup() {const username ref();const myForm ref(null);const checkFormValidity () {if (myForm.value) {const isFormValid myForm.value.checkValidity();console.log(Form is valid:, isFormValid);}};return {username,myForm,checkFormValidity};} }); /script原理 挂载阶段mounted 当组件被挂载时ref对应的DOM元素会被赋值。在Vue 3中组件的setup函数执行过程中ref初始化为null。然后在组件的生命周期钩子如onMounted或者在模板渲染完成后实际上是Vue内部的渲染机制ref会被正确地赋值为对应的DOM元素。这是因为Vue在渲染过程中会遍历模板识别出带有ref属性的DOM元素并将其与对应的ref变量关联起来。 更新阶段update 当组件的状态发生变化如count的值改变并导致DOM需要更新时Vue会重新渲染模板。在这个过程中ref变量仍然保持对相应DOM元素的引用。如果在setup函数中有对ref变量所引用的DOM元素进行操作的代码如修改textContent这些操作会在DOM更新完成后或者在适当的时机由Vue的响应式更新机制决定执行。 响应式原理关联 ref用于操作DOM元素也与Vue的响应式原理相关。当一个ref变量如count的值发生变化时Vue会触发组件的重新渲染。在重新渲染过程中其他与ref相关的操作如操作counterDisplay所引用的DOM元素可以利用这个更新时机来实现对DOM的动态操作。同时ref本身的更新机制通过value属性访问和修改也保证了操作的一致性和可追踪性使得在组件的整个生命周期内能够正确地对DOM进行操作。
http://www.hkea.cn/news/14516634/

相关文章:

  • 十大卖衣服网站新乡网站建设制作公司
  • 时光轴网站天河区建设网站
  • asp access网站架设教程主页网页设计
  • 微网站功能介绍搜索引擎优化的主要工作
  • 医院手机网站建设网站导航app
  • 深圳建设工程协会网站网络系统建设方案
  • 图片网站模板下载wordpress上传与安装包
  • 重庆做网站电话制作英文网站多少钱
  • 网站维护的作用深圳网络营销策划
  • 2017网站开发兼职普宁旅游网站设计方案
  • 买个网站空间安卓优化大师新版
  • 深圳宝安区住房和建设局网站官网WORDPRESS如何播放视频
  • 集团网站建设招标wordpress网页慢
  • 网络及建设公司网站解析软件的网站
  • 绿色环保材料网站模板下载免费网站制作手机软件的app
  • 小九自助建站网站图片大小优化
  • 一个网站如何创建多个页面wordpress网页播放器插件
  • 做网站的公司那家好。长沙视频制作公司
  • 茂名做网站的公司怎么做二维码转到网站
  • 遵义创意网站设计各大电商购物网站转化率报表
  • 建设电商网站需要多少钱营销型网站建设公司电话
  • 山东做网站的公司中国有几大电商平台
  • 梅州做网站多少钱广州站停运最新消息
  • 猪八戒网站开发合同内江市建设信息网站
  • 做经营性的网站备案条件建设手机网站大概要多少钱
  • 建设168网站广西网站建设服务好
  • 环球设计官网网站wordpress的登录界面
  • 呼和浩特网站优化公司茶山镇仿做网站
  • 没有后台的网站怎么做排名做自媒体需要哪些网站
  • 淄博哪家公司做网站最好3d动画制作软件下载