<template>
<div>
<div>姓名:{{person.name}}</div>
<div>年龄:{{person.age}}</div>
</div>
</template>
<script>
export default {
setup(){
let person = reactive({
name:'张三',
age:18
})
//我们需要借助toRef
let name = toRef(person,'name')
let age = roRef(person,'age')
return {
/* 正常来说,我们需要如下导入时,上面模板字符串则应该写为person.name */
// 下面的方式会导致数据失去响应式
// person.name,
// person.age
// 此时我们就需要借助 toRef
name,
age
}
}
}
</script>
<template>
<div>
<div>姓名:{{person.name}}</div>
<div>年龄:{{person.age}}</div>
</div>
</template>
<script>
export default {
setup(){
let person = reactive({
name:'张三',
age:18
})
//我们需要借助toRef
let name = toRef(person,'name')
let age = roRef(person,'age')
return {
/* 正常来说,我们需要如下导入时,上面模板字符串则应该写为person.name */
// 下面的方式会导致数据失去响应式
// person.name,
// person.age
// 此时我们就需要借助 toRef
name,
age
}
}
}
</script>
computed: 计算属性
shallowReactive : 浅层次的响应式对象,只处理对象的第一层,不常用。reactive是深层次的响应式对象
shallowRef:不对对象类型的数据做响应式处理,不常用
...
<script>
import {ref,reactive,readonly,shallowReadonly} from 'vue'
export default {
setup(){
let person = reactive({
name:'张三',
age:12,
a:{
b:'测试'
}
})
// 通过readonly把person保护起来,不允许修改
person = readonly(person)
return {
person
}
// 浅层保护,只保护name,age不被修改
person = shallowReadonly(person)
}
}
</script>
shallowReadonly:【浅层只读保护】,即只保护第一层,如上面的person对象,只保护 name,age不可修改
toRow:将reactive生成的响应式对象逆转为普通对象。【数据可修改,但不再是响应式,不会被监听到】
markRow:标记一个对象,使其永远不会成为响应式。
使用场景:
1、有些值不应该被修改,例如有些第三方库
2、当渲染变有不可变数据源的大列表数据时,可以提高性能
规定customRef接收一个函数回调,并且必须指定两个参数 trick,trigger