8***@qq.com
8***@qq.com
  • 发布:2026-02-06 02:10
  • 更新:2026-02-06 02:10
  • 阅读:26

vue3是假的?

分类:uni-app

vue版本
<script setup lang="ts">
import { version } from "vue";

    //version=3.4.21  

</script >

//业务代码
<template>
<view >
{{ name }}这里渲染的是空值
</view>
</template>

<script setup lang="ts">
const { name = '测试' } = defineProps<{
name ?: string
}>();
console.log({ name })//外部没传参,这里显示的是测试
</script >

我记得这个也行vue3.3就支持了吧?后台也vue3+ts,从早期版本一路更新到最新版,unaipp的vue感觉总有些不对

2026-02-06 02:10 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

你这段代码的问题出在 defineProps 的解构写法上。
在 uni-app 的 Vue3 项目里(包括 hbx 和 cli 创建的项目),<script setup> 中不能对 defineProps 的返回值进行解构,否则默认值不会生效,模板里也会拿不到值。

这是官方已知限制,知识库中没有直接提到,但对话记录里多次出现类似「拿不到默认值」的反馈,官方回复都是“不要用解构”。

正确写法如下(两种皆可):

<script setup lang="ts">  
// 写法1:不解构  
const props = defineProps<{  
  name?: string  
}>()  
console.log(props.name)   // 没传参时打印 undefined,模板里用 {{ props.name || '测试' }}  
</script>
<script setup lang="ts">  
// 写法2:给默认值用 withDefaults  
const props = withDefaults(defineProps<{  
  name?: string  
}>(), {  
  name: '测试'  
})  
console.log(props.name)   // 没传参时打印 '测试'  
</script>

模板里统一用 {{ props.name }} 即可正常渲染。

如果你用的是 cli 创建的项目,确保 vue@vue/compiler-sfc 版本一致,且 tsconfig.json 包含 "types": ["@dcloudio/types"],否则也可能出现类型推断异常。

内容为 AI 生成,仅供参考

要回复问题请先登录注册