在计算警告中使用 vue-i18n.t()

问题描述 投票:0回答:1

升级项目后,每次尝试在计算变量中使用 VueI18n.t() 时,我都会收到此警告:

[Vue warn]: getCurrentInstance() called inside a computed getter. This is incorrect usage as computed getters are not guaranteed to be executed with an active component instance. If you are using a composable inside a computed getter, move it ouside to the setup scope.

这是触发它的一个最小示例

<script lang="ts" setup>
import { useI18n } from 'vue-i18n'
import { computed } from 'vue'

const { t } = useI18n()
const props = defineProps<{
  infot: string
}>()

const label = computed(() => t(props.infot))
</script>

库版本:

"vue": "^3.4.6",
"vue-i18n": "^9.9.0",
"vite": "^5.0.11",
"@vitejs/plugin-vue": "^5.0.2",
"typescript": "^5.3.3",

我尝试过使用全局 $t() 但显然它不起作用。

const label = computed(() => $t(props.infot))

如果我将变量定义为函数并像这样调用它,警告就会消失:

function label() { return t(props.infot) }

或者如果我将其定义为可组合项并像这样使用它

const { label } = translateLabel(toRef(props, 'infot'))

我不喜欢以前的解决方案,因为在 VueI18n 文档中,他们在计算变量中使用 t() 没有问题。并且必须更改代码库内的所有事件会有点费力。我错过了什么吗?还有人遇到这个问题吗?

vuejs3 vue-i18n
1个回答
0
投票

只需将 vue 升级到 v3.4.7 即可。这应该可以解决你的问题。

了解更多信息:https://github.com/vuejs/core/discussions/9974

© www.soinside.com 2019 - 2024. All rights reserved.