Boolean 类型 props 失效主因是 HTML 布尔属性特性与 JS 表达式解析差异:Vue 中需用 :disabled="true" 传布尔值,disabled 简写传字符串;React 必须显式写 disabled={true},不可省略 {};默认值须为布尔类型,调试时应检查 typeof 而非仅真假值。

Boolean 类型的 props 在 Vue 或 React 中传入时“总是失效”,通常不是框架 bug,而是写法或理解偏差导致——关键在于 HTML 属性的布尔特性 和 JS 表达式解析规则 的差异。
HTML 模板里直接写 v-bind 或 : 才能传 true/false
在 Vue 模板中,如果这样写:
-
<MyComponent disabled></MyComponent>→disabled是一个 存在即为 true 的布尔属性,等价于disabled="disabled",但组件接收的props.disabled会是 字符串 "disabled"(非布尔值) -
<MyComponent :disabled="true"></MyComponent>→ 正确!带冒号表示 JS 表达式,props.disabled是 布尔 true -
<MyComponent :disabled="false"></MyComponent>→ 同样正确,传入布尔 false
React 中用 true / false 字面量,别省略
React 不支持 HTML 布尔属性简写语义(如 disabled 自动转 true),必须显式传值:
-
<Button disabled></Button>→props.disabled是 undefined(不是 false!) -
<Button disabled={true}></Button>→ 正确,传布尔 true -
<Button disabled={false}></Button>→ 正确,传布尔 false;不写该 prop 才等价于 false
默认值设置要匹配类型,避免 “falsy 覆盖”
定义 props 默认值时,若设为 false 却允许传空字符串、0、null 等 falsy 值,容易误判:
- Vue:
props: { disabled: { type: Boolean, default: false } }✅ 安全 - Vue 错误示范:
default: () => null或default: ''→ 类型不匹配,运行时警告,且逻辑异常 - React:
Component.defaultProps = { disabled: false };✅ 显式布尔默认值 - React 错误示范:
const { disabled = null } = props→ 解构默认值为 null,disabled就不是布尔了
调试技巧:打印类型,别只看真假值
遇到“看似传了 false 却没生效”,先检查实际类型:
- Vue:在
setup()或mounted()中加console.log(typeof props.disabled, props.disabled) - React:在函数组件开头加
console.log('disabled:', typeof disabled, disabled) - 常见陷阱:后端返回
"false"(字符串)、接口字段缺失导致undefined、v-model 绑定错对象属性等

















