Dodu
Dodu
  • 发布:2025-11-22 02:28
  • 更新:2025-11-22 02:28
  • 阅读:12

【报Bug】uniapp 小程序环境无法获取组件内通过 defineSlots 或 useSlots() 定义的 slot 的内容

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11 25h2

第三方开发者工具版本号: vscode 1.106.2

基础库版本号: 3.11.0

项目创建方式: CLI

CLI版本号: 3.0.0-4070620250821001

示例代码:
const slots = defineSlots<Slots>()  
type SlotFn = (props?: Record<string, unknown>) => any  
interface Slots {  
  default?: SlotFn  
  pre?: SlotFn  
}  

function demoMethod() {  
  const defaultSlots = slots.default?.() || [] // 这里在小程序中得到的时一个 bool 类型, 后面就该报错,在h5环境下时正常的  
  const preSlots = slots.pre?.() || []  
  const data = hasPre.value ? preSlots.map((slot: any) => slot.children).join('') : defaultSlots.map((slot: any) => slot.children).join('')  
  if (!data) {  
    warning({ msg: '没有找到代码内容' })  
    return  
  }  
  // ...  
}

操作步骤:

使用上述代码

预期结果:

能和h5环境一样,能正确得到一个对象,用来拿到 slot 下的内容。

实际结果:

slots.default 是一个 true 的 bool 类型

bug描述:

如题,vue3,ts setup 模式,定义一个组件,组件内通过 defineSlots 定义了已知类型的 slot,想着组件内,动态获取父组件中对某(或default)设置的slot的内容,以default为例:

const slots = defineSlots<Slots>()  
type SlotFn = (props?: Record<string, unknown>) => any  
interface Slots {  
  default?: SlotFn  
  pre?: SlotFn  
}  

function demoMethod() {  
  const defaultSlots = slots.default?.() || [] // 这里在小程序中得到的时一个 bool 类型, 后面就该报错,在h5环境下时正常的  
  const preSlots = slots.pre?.() || []  
  const data = hasPre.value ? preSlots.map((slot: any) => slot.children).join('') : defaultSlots.map((slot: any) => slot.children).join('')  
  if (!data) {  
    warning({ msg: '没有找到代码内容' })  
    return  
  }  
  // ...  
}

上面行 const defaultSlots = slots.default?.() || [] // 这里在小程序中得到的时一个 bool 类型, 后面就该报错,在h5环境下时正常的 为异常部分。

之前跟了帖子:https://ask.dcloud.net.cn/question/213119?notification_id-1564925rf-falseitem_id-308280__answer_id-308280__single-TRUE#!answer_308280

附件?:https://img-cdn-tc.dcloud.net.cn/uploads/answer/20251113/09476ac9f54ef289a991552c126aa459.png

2025-11-22 02:28 负责人:无 分享
已邀请:

要回复问题请先登录注册