在 Vue3 <script setup> + 组合式 API 之 怎用使用响应式变量
什么是响应式?
Vue3 的响应式是:当更改响应式对象的值改变时,视图会随即自动更新。
ref()
ref() 返回一个响应式对象,可以用 value 属性来访问或更改对象的值。ref 对象在模板中会自动解包,用变量名不需要加 .value 就能访问。
1 | <script setup> |
reactive()
用 reactive() 函数可以创建一个响应式对象,可以用对象的属性来访问对象,也可以使用 Object.assign() 来改变对象。
1 | <script setup> |
reactive()仅对对象类型有效(对象、数组和 Map、Set 这样的集合类型),而对 string、number 和 boolean 这样的原始类型无效。
readonly()
readonly() 返回一个原值的只读代理对象。
响应式数据源的侦听
组合式 API 通过如下函数定义侦听响应式数据源,详见官方文档。
watch()侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数。watchEffect()watch()使用immediate: true选项时的别名,立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。watchPostEffect()watchEffect()使用flush: 'post'选项时的别名。watchSyncEffect()watchEffect()使用flush: 'sync'选项时的别名。
ref()/reactive/非响应式变量该怎样选择?
响应式需要实时监听变量的状态,是需要系统开销的,所以不应该所有的变量都用响应式。
当页面因响应式变量变动而刷新时(包括隐藏、显示),很多时候非响应式变量值改动了也会跟着变,但并不是100%。
只要涉及到模板跟着实时更新的变量,都应该用响应式变量,反之则应该用飞响应式变量。
- 当变量改动后,模板视图不需要跟着变的时候,不需要用响应式变量。
- 当需要响应式,并且要覆盖全部的值来更改的时候,使用
ref,如列表数组、原始类型等。 - 当值为对象(对象、数组、Map、Set 等集合类型)类型的时候,用
reactive。
在 Vue3 <script setup> + 组合式 API 之 怎用使用响应式变量
https://coderpan.com/front-end/vue3-sfc-composition-script-setup-reactivity.html