【vue3】ref全家桶

您所在的位置:网站首页 小米平板安装google全家桶 【vue3】ref全家桶

【vue3】ref全家桶

#【vue3】ref全家桶| 来源: 网络整理| 查看: 265

ref全家桶

在这里插入图片描述

ref

ref 接受一个内部值并返回一个响应式且可变的ref对象。ref对象仅有一个.value property,指向该内部值。

在vue3中,定义的常量不是响应式的,修改值的时候页面不会发生变化。这时候我们需要调用ref来把它变成响应式的,修改ref对象值的时候,必须是修改value指向内部值,如下代码所示:

//引入ref import {ref} from "vue"; let name = "daxue"; //没有初始值的时候可以定义为 let sex = ref(0) let sex = ref("man"); const clickTap = ()=>{ //页面不会更新 name = "ding~daxue" //页面sex参数更新 sex.value = "woman" } //ref获取dom对象 //定义的变量名一定要跟div上ref属性值一模一样 const dom = ref(); unref

如果参数是一个ref,则返回内部值,否则返回参数本身。这是 val = isRef(val)?val.value:val 的语法糖函数。

toRef

可以用来为源响应式对象上的某个property新创建一个ref。然后,ref可以被传递,他会保持对其源property的响应式连接。

将对象某个属性变成可响应式的,并且是双向的。如下代码:

const user = { name:"daxue", sex:"woman" } const name = toRef(user,'name') const clickTap=()=>{ name = "ding~daxue" } toRefs

将响应式对象转换为普通对象,其中结果对象的每个property都是指向原始对象相应property的ref

这一属性相当于上面toRef的集合,是给对象里面每个属性都生成了ref。

const state = reactive({ foo: 1, bar: 2 }) const stateAsRefs = toRefs(state) /* stateAsRefs 的类型: { foo: Ref, bar: Ref } */ // ref 和原始 property 已经“链接”起来了 state.foo++ console.log(stateAsRefs.foo.value) // 2 stateAsRefs.foo.value++ console.log(state.foo) // 3 isRef

检查值是否为一个ref对象

customRef

创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和 trigger 函数作为参数,并且应该返回一个带有 get 和 set 的对象。

使用customRef通过v-model实现debounce的示例:

function useDebouncedRef(value, delay = 200) { let timeout return customRef((track, trigger) => { return { get() { track() return value }, set(newValue) { clearTimeout(timeout) timeout = setTimeout(() => { value = newValue trigger() }, delay) } } }) } export default { setup() { return { text: useDebouncedRef('hello') } } } shallowRef

创建一个跟踪自身 .value 变化的 ref,但不会使其值也变成响应式的。

//页面 {{user.name}} let user = shallowRef({ name: "daxue", age: 8 }) const change = () => { user.value.name = "xiaoxue" }

上面这种情况页面不会更新,但是打印值发现其实value已经更新.要想页面更新,需要下面这种方法

let user = shallowRef({ name: "daxue", age: 8 }) const change = () => { //1111111 user.value = { name: "xiaoxue", age: 9 } //22222222 user.value.name="xiaoxue"; triggerRef(user) }

注意:shallowRef跟ref不能一起使用,因为ref使用了triggerRef,会影响shallowRef的只改变.value不改变具体值。

triggerRef

手动执行与 shallowRef 关联的任何作用 (effect)。

谷歌调试工具小tips

在这里插入图片描述

在这里插入图片描述

这样直接查看ref具体值,不需要再点开value看里面具体值



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3