vue2与vue3中的computed

时间:2024-10-26 07:04:13

以下两种代码一样

 for(let i=0;i<allData.value.length;i++){

                sampleNoArr.value.push(allData.value[i].bakingBatch)

 }

  // computed 返回的是一个响应式的 ref 对象

sampleNoArr = computed(() => allData.value.map(item => item.bakingBatch))

Vue 2 中的 computed:

1. 返回的是一个响应式的值,而不是响应式对象。

  • 可以直接在模板中使用,无需 .value。
  • 在 JavaScript 中使用时也无需 .value。
// Vue 2
export default {
  data() {
    return {
      count: 0
    }
  },
  computed: {
    doubleCount() {
      return this.count * 2
    }
  },
  methods: {
    logDouble() {
      console.log(this.doubleCount) // 直接使用,无需 .value
    }
  }
}

Vue 3 中的 computed:

  • 在组合式 API 中,computed 返回的是一个响应式的 ref 对象。
  • 在模板中使用时,Vue 会自动解包 ref,所以不需要 .value。
  • 在 JavaScript 中使用时需要通过 .value 访问其值。
// Vue 3 组合式 API
import { ref, computed } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const doubleCount = computed(() => count.value * 2)

    function logDouble() {
      console.log(doubleCount.value) // 需要使用 .value
    }

    return {
      count,
      doubleCount,
      logDouble
    }
  }
}