toRef toRefs toRaw

toRef

如果原始对象是非响应式的就不会更新视图 数据是会变的

  1. <template>
  2. <div>
  3. <button @click="change">按钮</button>
  4. {{state}}
  5. </div>
  6. </template>
  7. <script setup lang="ts">
  8. import { reactive, toRef } from 'vue'
  9. const obj = {
  10. foo: 1,
  11. bar: 1
  12. }
  13. const state = toRef(obj, 'bar')
  14. // bar 转化为响应式对象
  15. const change = () => {
  16. state.value++
  17. console.log(obj, state);
  18. }
  19. </script>

如果原始对象是响应式的是会更新视图并且改变数据的

toRefs

可以帮我们批量创建ref对象主要是方便我们解构使用

  1. import { reactive, toRefs } from 'vue'
  2. const obj = reactive({
  3. foo: 1,
  4. bar: 1
  5. })
  6. let { foo, bar } = toRefs(obj)
  7. foo.value++
  8. console.log(foo, bar);

toRaw

将响应式对象转化为普通对象

  1. import { reactive, toRaw } from 'vue'
  2. const obj = reactive({
  3. foo: 1,
  4. bar: 1
  5. })
  6. const state = toRaw(obj)
  7. // 响应式对象转化为普通对象
  8. const change = () => {
  9. console.log(obj, state);
  10. }