调用wordpress分类名称网站建设排名优化公司
2026/1/15 9:21:39 网站建设 项目流程
调用wordpress分类名称,网站建设排名优化公司,网站收录登录入口,做我的奴隶 good网站ref ref 是用来创建响应式引用的主要方法。它通常用于基本数据类型#xff08;如字符串、数字、布尔值、对象、数组等#xff09;的响应式包装。在模板中可以直接使用#xff0c;但在 JavaScript 中需要通过 .value 属性来访问或修改它的值 1、ref具有深层次响应式特点…refref 是用来创建响应式引用的主要方法。它通常用于基本数据类型如字符串、数字、布尔值、对象、数组等的响应式包装。在模板中可以直接使用但在 JavaScript 中需要通过 .value 属性来访问或修改它的值1、ref具有深层次响应式特点主要针对对象2、通过shallowRef创建的响应式不会深层递归不具备深层响应式特点import { ref } from vue; const count ref(0); const userName 洛可可白; // 在 JavaScript 中访问 console.log(count.value); // 0 count.value; // 增加计数 // 在模板中访问 // div{{ count }}/div // ref也可以用于获取dom元素 divdiv refmyDiv/div const myDiv ref(null); myDiv.value.innerHTML userName;reactivereactive 是用来创建响应式对象的方法适用于处理对象和数组。reactive对象的属性可以在模板和 JavaScript 中直接访问和修改不需要 .value1、reactive具有深层次响应式特点2、通过shallowReactive创建的响应式不会深层递归不具备深层响应式特点3、使用reactive创建对象时不要去直接替换reactive关联的对象会丢失响应式4、对reactive的数据进行对象解构时解构的数据也会丢失响应式5、如果将ref作为reactive创建对象的属性获取该属性值时不需要解包无需.value但是如果将ref作为shallowReactive创建对象的属性时不会自动解包。import { reactive } from vue; const state reactive({ count: 0, userName: 洛可可白 }); // 在 JavaScript 中访问和修改 console.log(state.count); // 0 state.count; // 增加计数 // 在模板中直接访问 // div{{ state.count }}/div // div{{ state.userName }}/divref对比reactivevue中的响应式是通过Proxy来实现的Proxy只能拦截对象无法拦截原始值那如果需要把原始值转成响应式如何处理1、用户自己把原始值包装成对象再使用reactiveApi2、框架层面帮你处理成对象使用refApiref有两种处理方式A、如果是原始值使用Object.defineProperty来实现B、如果是对象使用reactiveApi来实现C、reactive响应式内部是由Proxy来实现响应式其它APItoRef、toRefs、unRef、readonly、isRef、isReactive、isProxy、isReadonlyimport { isReactive, reactive, toRef, isRef, unref, toRefs, shallowReactive, shallowReadonly, readonly, isProxy, } from vue const state reactive({ count: 1, obj: { value: 1, }, }) // 将响应式对象属性转化为ref const countRef toRef(state, count) // const countRef ref(state.count) // 将整个reactive对象的所有属性都转化为ref对象 const refs toRefs(state) // 取值 const count refs.count.value // 判断一个对象是否是ref isRef(countRef) // true // 解包ref对象如果不是ref直接返回值 unref(countRef) // 1 // 判断是否是reactive isReactive(state) // true isReactive(state.obj) // true reactive是深层次响应式所以下层对象也是reactive对象 // 创建只读代理 只能获取不能改值 const readObj readonly(state || countRef) // isProxy 检查一个对象是否由reactive、readonly、shallowReactive、shallowReadonly创建的代理 // 因为ref内部是用了两种方式所以它并不是单一的Proxy代理实现 isProxy(state)customRefcustomRef 是 Vue 3 响应式系统暴露的一个底层 API它允许开发者创建具有完全自定义依赖追踪和触发更新逻辑的 refcustomRef 函数接收一个工厂函数这个工厂函数需要返回一个包含 get 和 set 方法的对象而这两个方法会收到 track 和 trigger 这两个关键函数作为参数import{customRef}fromvue;constmyCustomRefcustomRef((track,trigger){// 内部可以定义任何你想要的变量letvalueinitial value;return{get(){track();// 依赖收集returnvalue;},set(newValue){valuenewValue;trigger();// 触发更新}};});customRef 实现防抖这是 customRef 最经典的应用场景创建一个值在频繁更改时如输入框输入只会在最后一次更改后的特定时间后才触发更新效果你在输入框中快速打字时下方的显示不会实时变化只会在你停止输入 500 毫秒后更新为最终内容。templateinput v-modeldebouncedTextplaceholder试试快速输入.../p防抖后的值{{debouncedText}}/p/templatescript setupimport{customRef}fromvue;// 1. 定义一个通用的防抖 customRef 函数functionuseDebouncedRef(value,delay500){returncustomRef((track,trigger){const_valuevalueconst_debouncedebounce((val){_valuevaltrigger()},delay)return{get(){track();// 追踪依赖return_value;},set(newValue){_debounce(newValue)}};});}// 2. 使用它constdebouncedTextuseDebouncedRef(,500);/scriptv-model、defineModel(vue3.4)v-model 既可以实现数据到表单元素之间的双向绑定也可以用于父子组件之间的数据双向绑定!--使用场景一:基本表单组件将组件实例上的searchText绑定给input的value属性--input v-modelsearchText/!--使用场景二:父子组件双向绑定--!--当父组件中pageNum发生变化时子组件会自动更新currentPage的值同样当子组件的currentPage发生变化时父组件也会自动更新pageNum的值--!--父组件--pagination v-model:pagepageNum/!--子组件--constpropsdefineProps({page:{type:Number,default:1}});constemitdefineEmits([update:page]);constcurrentPagecomputednumber|undefined({get:()props.page,set:value{emit(update:page,value);}});defineModel仅用于父子组件之间的数据双向绑定它只是一个语法糖内部还是用的props取值以及自定义事件来完成父组件数据的更新并没有打破单向数据流!--父组件--Home v-model:count1state.countv-model:count2_count1name张三/Home!--子组件--constcount1defineModel(count1)constcount2defineModel(count2)functionupdate(){count1.value;count2.value;}computedcomputed 用于创建计算属性这些属性的值是基于其他响应式数据源派生出来的。计算属性是惰性求值的只有当它们的依赖响应式数据发生改变时才会重新计算对比模板中直接使用函数来实现它的性能更好computed值也可以修改但是computed的设计思想只用来获取值所以不建议进行修改操作import { ref, computed } from vue const count ref(0) const doubleCount computed(() count.value * 2) // computed的修改使用 import { computed, isReactive, reactive, ref } from vue const state reactive({ count: 1, obj: { value: 1, }, }) const count ref(0) const newCount computed({ get(value) { return state.count 10 }, set(value) { count.value value }, }) setTimeout(() { newCount.value newCount.value 1 }, 2000)watchwatch 用于观察响应式数据的变化并在数据变化时执行特定的函数。1、watch的执行顺序优于computed2、watch可以监听ref、reactive、computed以及Getter函数(监听函数返回值)以及数组形式的ref或者reactive3、watch监听的对象是reactive数据时监听层级是深层次的4、如果想要监听reactive对象属性值时应该使用回调函数形式来监听【watch(() getValue, () {})】import{ref,watch}fromvue;constcountref(0);watch(count,(newValue,oldValue){console.log(Count changed from${oldValue}to${newValue});});functiongetValue(){returnstate.count/2}watch(getValue,(newV,oldV){})watch([_count1,_count2,state,state2],(newV,oldV){},{immediate:true,// 默认false 组件渲染时会执行一次deep:true,// 默认true 深度监听但是如果监听对象是computed值或者Getter函数时默认就是falseonce:true// 默认false 监听器回调函数只执行一次flush:post// dom更新之后执行},)watchEffectwatchEffect 是一个基于响应式数据源的观察者当响应式数据源变化时重新执行。1、会立即执行一次2、多依赖项监听可以使用watchEffect而不是watch3、如果只需要监听reactive对象的某个属性那么watchEffect函数中只需要用到该属性即可性能对比watch更优import{ref,watchEffect}fromvue;constcountref(0);constunwatchwatchEffect((){console.log(Count is now:${count.value});});unwatch()// 停止侦听器

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询