ref : 深层响应
let num = ref(0);
num.value = 1;
let form = ref({age: 18});
form.value.age = 24;
let arr = ref([]);
arr.value.push(1);
import { ref, isRef, shallowRef, tiggerRef, customRef } from 'vue';
type U = { name: string };
const user = ref<u>({ name: 'zhang' });
import type { Ref } from 'vue';
const dog:Ref<U> = ref({ name: 'dahuang' });
cosnt isRefFlag = isRef(user);
const cat = shallowRef({ name: '花点' });
const change = () => {
cat.value.name = '小花';
console.log(cat);
cat.value = { name: '大花' };
triggerRef(cat);
}
function settingRef<T>(value: T) {
return settingRef((track, tigger) => {
return {
get() {
track();
return value;
}
set(newValue) {
console.log('触发修改');
value = newValue;
trgger();
}
}
})
}
const obj = settingRef<string>('Fish');
{{ obj }}
obj.value = '修改'
<div ref="fetchTest">{{ user }}</div>
const fetchTest = ref<HTMLDivElement>();
fetchTest.value?.innerText
reactive : 深层响应
let form = reactive('fish');
let form = reactive({name:'Fish',age:18});
type U = { name: string, age: number };
let form = reactive(U)({
name: 'fish',
age: 18
});
form.age = 24;
let list = reactive<string[]>([])
const add = () => {
list.push('hello')
}
let res = ['vue', 'typescript', 'nestjs', 'vite', 'pinia']
list.push(...res)
将数组变为reactive 对象的一个属性后直接赋值
readyonly 只读属性
let obj = reactvie({name:'Fish'})
const read = readonly(obj)
read.name = 'Fisher'
obj.name = 'Fisher'
watchEffect(() => {
})
shallowReactive 浅层作用
const state = shallowReactive({
foo: 1,
nested: {
bar: 2
}
})
sate.foo++;
isReactive(state.nested);
state.nested.bar++;
shallowReadonly readonly() 的浅层作用形式
const state = shallowReadonly({
foo: 1,
nested: {
bar: 2
}
})
state.foo++
isReadonly(state.nested)
state.nested.bar++
toRef
toRef(1)
let person = reactive({
name:'张三',
age:20,
job:{
one:{
salary:20
}
}
});
let name = toRef(person, 'name');
name.value = '张四';
console.log(person.name)
person.name = '张五'
console.log(name.value)
let age = toRef(() => { person.age });
const ageRef = ref(person.age);
toRefs
const obj = reactvie({name:'Fish',age:18})
let { name , age } = toRefs(obj)
toRaw
const obj = reactive({ name: '张三', age:18 });
const res = toRaw(obj);
toValue 3.3+
toValue(1)
toValue(ref(1))
toValue(() => 1)
- isRef() 检查某个值是否是 ref
- unref() 是ref返回 obj.value 否则返回obj本身 val = isRef(val) ? val.value : val 语法糖
- isProxy() 检查一个对象是否是由 reactive()、readonly()、shallowReactive() 或 shallowReadonly() 创建的代理 返回 Boolean
- isReactive() 检查一个对象是否由 reactive()或者 shallowReactive() 创建的代理 返回 Boolean
- isReadonly() 检查传入的值是否为只读对象。只读对象的属性可以更改,但不能直接修改该对象 readonly() 和 shallowReadonly() 创建的代理都是只读的 返回 Boolean