Vue3的ref全家桶的使用

128 阅读1分钟

介绍ref

在setup函数中使用ref函数,可以变成我们想要的响应式数据,数据发生变化时,vue就会更新视图 例如:

<script setup lang="ts">
import { ref } from "vue";
const List = ref({ name: '小石'});
</script>

我们在script里面定义的语法糖,所以不需要在return,ref其实就是一个定义的类,通过点击修改打印出的值可以看见是通过改变.value的值发生响应式的数据改变

Snipaste_2023-06-03_14-27-21.png

介绍isRef

isRef就是判断一个东西是不是ref对象,返回一个布尔值

<script setup lang="ts">
import { ref, isRef} from "vue";

const List = ref({ name: '小石'});

const change = (() => {
  console.log(isRef(List)); //true
  
})
</script>

介绍shallowRef

shallowRef是做浅层次响应式的,而ref是深层次的响应式,两者是有区别的,shallowRef包裹数据点击修改,视图是不会发生变化,但是这个属性值确发生变化,所以是浅层次,改变.value的值才会发生变化,他只到这个.value,在去里面一个个定义修改的值,shallowRef和Ref不能一起使用

介绍triggerRef

首先我们知道shallowRef和Ref不能一起使用,shallowRef会被受到影响,因为ref底层更新的时候会触发triggerRef,这个triggerRef会强制更新我们这个收集的依赖

介绍 customRef

这个是让我们自定义ref函数,这是一个回调函数,要求return一个对象要有get,set的两个方法,在回调中有两个参数,一个是用来收集依赖的,一个是触发依赖

function Myname<T>(value: T) {
  return customRef((a, b) => {
    return {
      get() {
        //收集依赖
        a()
        return value
      },
      set(newValue) {
        //触发依赖 更新值
        value = newValue
        b()
      }
    }
  })
}