ref的意思是引用,reference。
用来定义常用的基础类型(String,Number,Boolean等等)
ref() 创建的响应式数据后会返一个响应式的对象。
属性的值需要用 .value
才能访问到,value
返回的是Proxy
将值封装在一个对象中,看似没有必要,但为了保持 JavaScript 中不同数据类型的行为统一,这是必须的。这是因为在 JavaScript 中,
Number
或String
等基本类型是通过值而非引用传递的
使用
接受一个内部值并返回一个响应式且可变的 ref 对象,在setup函数内部访问ref函数需要加.value, 如果要加类型,要用泛型,不加则会类型推论,也可以不给初始值,则是any,且是undefined:
const ref1 = ref(1);
const ref2 = ref<number>(2);
const ref3 = ref1.value;//不是响应式,相当于变量
const ref4 = ref();//refs.value是undefined
ref2.value = 5;//赋值 读取都要.value
一般来说,ref只会赋值基础数据类型和数组,也可以泛型联合类型 如果将对象分配为ref值,则它将被reactive函数处理为深层的响应式对象:
//不建议,内部也是reactive处理
const ref1 = ref({
a: 10,
});
//不确定类型
const ref3 = ref<string | number>();
ref3.value = 1;
ref3.value = "";
//数组对象,ts类型声明,用泛型
type Obj1 = { c: string };
type Obj2 = {
b: string;
c: Obj1[];
};
const ref2 = ref<Obj2[]>([
{
b: "",
c: [{ c: "" }],
},
]);