:1.使用ref定义变量的时候,在setup中取值用x.value的方式;
当普通变量不用ref,用 a = 'xx' 的形式改变的时候,template上的值不会更新,
使用了ref,变量改变,template更新
例如:
ref定义负责类型的时候 ,在ref后面添加类型
const foo = ref<string | number>('foo')
vue 提供了关于refde 方法有
isRef:判断是否是ref对象;
unref:参数是一个 ref,则返回内部值,否则返回参数本身;
例如:
function useFoo (x: number | Ref<number>) {
const unwrapped = unref(x) // unwrapped 现在一定是数字类型
}
toRef:可以用来为源响应式对象上的某个 property 新创建一个 ref。然后,ref 可以被传递,它会保持对其源 property 的响应式连接。即把一个对象的的那个属性值赋给一个变量,变量改变的时候,那个对象也相对改变
例如:obj不能为ref对象,但可以是reactive对象
toRefs:将响应式对象转换为普通对象,其中结果对象的每个 property 都是指向原始对象相应 property 的 ref
state的值与stateAsRefs的值对应
customRef:创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和 trigger 函数作为参数,并且应该返回一个带有 get 和 set 的对象。有对象的代理功能
2、使用setup函数的时候,setup函数没有return出去的变量,template上获取不到。如果在组件上使用了回报 Property "xxx" was accessed during render but is not defined on instance.(属性“xxx”在渲染期间被访问,但未在实例上定义。)
3、在onMounted里面不用this直接调用setup的变量而且,tabList与changeMsg的改变都能直接更新视图。但是当使用tabList = ['xxx'],changeMsg = ['xxx']的时候,视图上changeMsg的部分改变,tabList 不改变;
4、vue的watchEffect方法监听
为了根据响应式状态自动应用和重新应用副作用,我们可以使用 watchEffect 函数。它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。监听ref对象有效,且监听得写在ref对象后面,否则报Cannot read property 'value' of undefined
停止侦听
当 watchEffect 在组件的 setup() 函数或生命周期钩子被调用时,侦听器会被链接到该组件的生命周期,并在组件卸载时自动停止。
5s前还可以出text的改变,5s后text改变也不触发监听、
清除副作用,即在组件数据更新视图前回调函数
5、watch:watch API 与选项式 API this.$watch (以及相应的 watch 选项) 完全等效。watch 需要侦听特定的数据源,并在单独的回调函数中执行副作用。默认情况下,它也是惰性的——即回调仅在侦听源发生变化时被调用。
与 watchEffect 相比,watch 允许我们:
惰性地执行副作用;
更具体地说明应触发侦听器重新运行的状态;
访问被侦听状态的先前值和当前值。
监听一个源的时候
监听多个源的时候
深度监听
停止监听
未完待续。。。