You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Nuxt3的Composition API中获取子组件emit值的问题

解决方案

在Nuxt3的Composition API中,你可以用useState()(适合跨服务端/客户端场景)或者ref()(仅客户端状态)来存储选中的尺寸值,这样就能在addToBasket函数中获取到它。以下是具体实现:

方法一:使用useState()(推荐,Nuxt3专属)

useState()会创建一个跨服务端和客户端共享的响应式状态,适合需要在页面刷新或路由跳转后保留状态的场景:

<SelectSize @selectedSize="handleSizeSelect"></SelectSize>
<script setup>
// 创建响应式状态存储选中的尺寸,初始值设为null或空字符串
const selectedSize = useState('selectedSize', () => null)

// 处理尺寸选择事件,把选中的值赋值给状态变量
const handleSizeSelect = (val) => {
  selectedSize.value = val
}

const addToBasket = (id) => {
  console.log('选中的尺寸:', selectedSize.value)
  console.log('商品ID:', id)
  // 这里可以继续编写加入购物车的逻辑
}
</script>

方法二:使用ref()(仅客户端状态)

如果不需要服务端渲染时的状态同步,仅在客户端使用的话,可以用Vue的ref():

<SelectSize @selectedSize="handleSizeSelect"></SelectSize>
<script setup>
import { ref } from 'vue'

// 创建客户端响应式变量
const selectedSize = ref(null)

const handleSizeSelect = (val) => {
  selectedSize.value = val
}

const addToBasket = (id) => {
  console.log('选中的尺寸:', selectedSize.value)
  console.log('商品ID:', id)
}
</script>

关键说明

  • 你之前的写法是把selectedSize作为事件处理函数并返回值,但这种方式不会存储状态,每次调用selectedSize()(无参数)都会返回undefined。
  • 不管用useState()还是ref(),都需要通过.value来访问或修改响应式变量的值(在<script setup>中,模板里可以直接用变量名,不用.value)。

内容的提问来源于stack exchange,提问作者Frallen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25