javascript Vuesjs 3 composition中的computed函数返回refImpl

bwntbbo3  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(311)

我尝试使用Vuejs 3中的一个计算函数,该函数使用组合在一个.js文件中外部化。
这里我的.vue文件,它很简单:计数变量,其递增以触发所述计算函数。

<template>
  <div>
    {{ computedCount }}
  </div>
</template>

<script setup>
import { ref } from 'vue'
import useComputedValue from './js/useComputed' // Import computed function

const count = ref(0) // Instanciate the count variable
count.value += 1 // Trigger the compute
const computedCount = useComputedValue(count)
console.debug(computedCount)
</script>

下面是我的useComputed.js文件:

import { computed } from 'vue'

export default function useComputedValue(count) {
  const computedValue = computed(() => count.value * 5)
  return {
    computedValue,
  }
}

该函数简单地将参数中给定的值乘以5。问题是console.log(computedCount)给出了一个

{computedValue: ComputedRefImpl}
computedValue: ComputedRefImpl {dep: Set(1), _dirty: false, __v_isRef: true, effect: ReactiveEffect, _setter: ƒ, …}
[[Prototype]]: Object

在模板中,它显示{“computedValue”:5 }因此,该函数不会返回乘以5参数的值,而是返回一个 Package 器对象refImpl。
该示例改编自文档:组成文件
如果我直接在.vue文件的标记中声明计算函数,而不从其他文件导入它,它会像预期的那样工作:该函数返回计数值乘以5。
很明显,这是我不明白的事情......但是什么?

  • 我使用的是3.2和标签,所以脚本标签中的setup()返回不再需要:3.2*

谢谢你在adavnce。

7eumitmz

7eumitmz1#

返回的是函数本身。如果您不在模板范围内,则需要返回computedCount.value

hivapdat

hivapdat2#

因为函数useComputedValue返回一个形式为{ computedCount: ComputedRef<number> }的对象,所以vue和console.debug可以正常工作。所有正确的,但似乎你正在寻找的是computed返回,你将有2个解决办法:
1.编辑文件./js/useComputed(如果您想要正确的文件名含义,建议使用此方法)

import { computed } from 'vue'

export default function useComputedValue(count) {
  const computedValue = computed(() => count.value * 5)
  // return {
  //  computedValue,
  //}
  return computedValue
}

1.编辑文件<vue>(如果扩展功能,建议使用此方法)

<template>
  <div>
    {{ computedCount }}
  </div>
</template>

<script setup>
import { ref } from 'vue'
import useComputedValue from './js/useComputed' // Import computed function

const count = ref(0) // Instanciate the count variable
count.value += 1 // Trigger the compute
// const computedCount = useComputedValue(count)
const { computedValue: computedCount } = useComputedValue(count)
console.debug(computedCount)
</script>

相关问题