其他分享
首页 > 其他分享> > Vue3:ref、reactive、toRef、toRefs的区别

Vue3:ref、reactive、toRef、toRefs的区别

作者:互联网

一、ref

(1)ref是什么

(2)代码

<template>
  <div>
    <h2>{{ name }}{{ age }}岁</h2>
    <h2>改变次数:{{ state.count }}</h2>
  </div>
</template>

<script>
import { ref } from 'vue'

export default {
  name: 'App',
  setup() {
    const name = ref('小李')
    const age = ref(18)

    const state = ref({
      count: 0,
    })

    setTimeout(() => {
      name.value = '小红'
      age.value = 20
      // 注:引用类型赋值时必须加上.value,否则会丢失响应性
      state.value.count ++
    }, 2000)

    return {
      name,
      age,
      state,
    }
  },
}
</script>

(3)注意


二、reactive

(1)reactive是什么

(2)代码

<template>
  <div>
    <h2>{{ user.name }}{{ user.age }}岁</h2>
  </div>
</template>

<script>
import { reactive } from 'vue'

export default {
  name: 'App',
  setup() {
    const user = reactive({
      name: '小李',
      age: 18
    })

    // 测试响应式效果
    setTimeout(() => {
      user.name = '小红'
      user.age = 20
    }, 2000)

    return {
      user
    }
  },
}
</script>

三、toRef

(1)toRef是什么

(2)代码

<template>
  <div>
    <h2>user.age: {{ user.age }}</h2>
    <h2>ageRef: {{ ageRef }}</h2>
  </div>
</template>

<script>
import { reactive, toRef } from 'vue'

export default {
  name: 'App',
  setup() {
    const user = reactive({
      name: '小李',
      age: 18
    })

    const ageRef = toRef(user, 'age')

    // 测试响应式效果
    setTimeout(() => {
      user.age = 20
    }, 2000)

    setTimeout(() => {
      ageRef.value = 30
    }, 3000)

    return {
      user,
      ageRef
    }
  },
}
</script>

四、toRefs

(1)toRefs是什么

(2)代码

<template>
  <div>
    <h2>{{ name }}{{ age }}岁</h2>
  </div>
</template>

<script>
import { reactive, toRefs } from 'vue'

export default {
  name: 'App',
  setup() {
    const user = reactive({
      name: '小李',
      age: 18
    })

    const { age } = toRefs(user)

    // 测试响应式效果
    setTimeout(() => {
      user.name = '小红'
      
      // toRefs将属性转换为响应式的ref属性,需要通过.value来修改值
      age.value = 20
    }, 2000)

    return {
      // ...user, // 直接解构会失去响应式
      ...toRefs(user) // 通过toRefs解构不会失去响应式
    }
  },
}
</script>

结论:

标签:name,响应,age,toRefs,toRef,reactive,user,ref
来源: https://blog.csdn.net/elevenhope/article/details/122416359