升级项目后,每次尝试在计算变量中使用 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() 没有问题。并且必须更改代码库内的所有事件会有点费力。我错过了什么吗?还有人遇到这个问题吗?
只需将 vue 升级到 v3.4.7 即可。这应该可以解决你的问题。