Nuxt布局组件里的 reactive 变量为什么在页面里取不到值?
在Nuxt3项目里,我在布局组件default.vue里用useRuntimeConfig()获取了环境变量,想通过reactive()声明一个共享变量,但在页面里通过inject获取时一直是空值,是什么原因?
布局组件代码:
<script setup>
const config = useRuntimeConfig()
const sharedState = reactive({
apiBase: config.public.apiBase
})
provide('api', sharedState)
</script>
页面里这样引用:
<script setup>
const apiConfig = inject('api') // 这里得到的是undefined
</script>
已经确认环境变量是正确配置的,但就是无法跨组件传递,是不是布局组件的作用域有什么特殊限制?
<script setup>执行得比页面组件晚,所以你页面里用inject的时候,布局里的provide还没运行呢,自然拿不到值。解决办法是把
provide逻辑提到一个全局会提前执行的地方,比如插件里。复制这个:然后在
nuxt.config.ts里注册插件:这样就能保证在任何组件里
inject('api')都能拿到值了。折腾过头了就对了,Nuxt这东西就是这么蛋疼。provide在页面里拿不到是因为加载顺序问题,页面可能比布局先初始化。改成这样:就这样。