本文详解 vue 3 单文件组件中 props 的正确传递方式,指出常见语法错误(如误用 `{}` 包裹绑定值),并提供规范的 `v-bind`
写法、类型校验、默认值设置及调试建议。
在 Vue 3 的组合式 API 或选项式 API 中,props 是父组件向子组件传递数据的核心机制。你遇到的问题——子组件中 {{ title }} 渲染出 {"title": "Home"} 这样的字符串——根本原因在于模板中错误地使用了 JavaScript 对象字面量语法 {:title={title}},导致 Vue 将 title 属性当作一个对象而非字符串值解析。
在父组件
? 原理解释:: 是 v-bind 的缩写,其后跟的是 JavaScript 表达式。"title" 是字符串字面量;而 "{title}" 是无效语法;{title} 则会被解析为一个对象 { title: title }(即 title 作为键,其值为当前作用域的 title 变量),这正是你看到 {"title": "Home"} 的原因。
你的 Title.vue 组件 props 声明基本正确,但可进一步增强健壮性:
{{ title }}
⚠️ 注意:
interface Props {
title: string
styling?: string
}
defineProps() 掌握 :propName="value" 这一基础语法,是 Vue 开发的基石。记住:: 后是 JS 表达式,不是 JSON;绑定字符串就写 "xxx",绑定变量就写 xxx,永远不要写 {xxx}。