javascript Computed在Vue 3脚本设置中如何工作?

zbsbpyhn  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(174)

我正在尝试让computed<script setup>中工作:

<template>
  <div>
    <p>{{ whatever.get() }}</p>
  </div>
</template>

<script setup>
import {computed} from "vue";

const whatever = computed({
    get() {
        console.log('check')
        return 'check?';
    }
})
</script>

console.log()通过,但return语句似乎抛出了一个错误:

check
Vue warn]: Unhandled error during execution of render function 
  at <Cms>
Uncaught TypeError: $setup.whatever.get is not a function
at Proxy.render (app.js?id=d9e007128724c77a8d69ec76c6c081a0:39550:266)
at renderComponentRoot (app.js?id=d9e007128724c77a8d69ec76c6c081a0:25902:44)
at ReactiveEffect.componentUpdateFn [as fn] (app.js?id=d9e007128724c77a8d69ec76c6c081a0:30019:57)
at ReactiveEffect.run (app.js?id=d9e007128724c77a8d69ec76c6c081a0:23830:29)
at setupRenderEffect (app.js?id=d9e007128724c77a8d69ec76c6c081a0:30145:9)
at mountComponent (app.js?id=d9e007128724c77a8d69ec76c6c081a0:29928:9)
at processComponent (app.js?id=d9e007128724c77a8d69ec76c6c081a0:29886:17)
at patch (app.js?id=d9e007128724c77a8d69ec76c6c081a0:29487:21)
at render (app.js?id=d9e007128724c77a8d69ec76c6c081a0:30630:13)
at mount (app.js?id=d9e007128724c77a8d69ec76c6c081a0:28882:25)

我做错了什么?

gajydyqb

gajydyqb1#

在 * * <template> * * 中 :
仅 Getter :

  • {{ myVal }}
  • <p v-text="myVal" />

获取 器 和 设置 器 :

  • <input v-model="myVal">
    • 重要 提示 : * * 请勿 * * * * * * * 使用 myVal.get()myVal.set(value) ! 使用 :
  • 正在 获取 : myVal
  • 设置 ( 分配 ) :myVal = value

在 * * <script setup> * * 中 :
仅 Getter :

const someReactiveRef = ref(null)
const myVal = computed(() => someReactiveRef.value)

中 的 每 一 个
获取 程序 和 设置 程序 :

const someReactiveRef = ref(null)

const myVal = computed({
  get() {
    return someReactiveRef.value
  },
  set(val) {
    someReactiveRef.value = val
  }
})
// myVal can now be used in `v-model`

格式
当 reactive ref 来自 一 个 reactive() 对象 的 属性 时 , 你 不 需要 在 setter 或 getter 中 使用 .value 。 例如 :

const state = reactive({
  someProp: null
})

const myVal = computed({
  get() {
    return store.someProp
  },
  set(val) {
    store.someProp = val
  }
})

格式
请 记住 , 您 始终 可以 在 reactive 中 使用 computed 。 例如 :
第 一 个

    • 重要 说明 : * *
  • 当 将 非 React 性 参考 传递 给 computed 时 , Vue 将 警告 您 ( 不 需要 计算 的 Package 器 ) 。
  • 当 向 其 传递 包含 循环 相关 性 ( 例如 :组件 示例 ) Vue 将 再次 警告 您 并 建议 使用 shallowRefmarkRaw
j5fpnvbx

j5fpnvbx2#

计算属性以字段的形式出现。无论你是传入函数(如computed(() => /*...*/))还是用get()方法(如果你没有提供set()方法,这里是等效的)传入对象,都是如此。
模板应该只使用计算属性的名称,这里是whatever

<template>
  <div>
    <p>{{ whatever }}</p>
  </div>
</template>

相关问题