关于 disabled 属性的一个不起眼但又容易引起迷惑的问题

来源:4-8 小试牛刀 - Button 组件编码 第一部分

Neolu4ever

2022-11-17

在 mdn 网站上描述 disabled 是一个 boolean属性, 老师在课程中定义 interface 接口也是如此。于是我会直觉上认为,我要是在标签上启用 disabled 就必须 这样传值:disabled = { true }。

然而日常使用中我基本上本能就写上<button disbaled></button>,没有觉得有任何问题,这时我细想了一下就觉得奇怪了。

我去查了一下,事实上 disabled 可以传入若干任意字符串来启用它,比如:

  • disabled = “yes”
  • disabled = “123”
  • disabled = “ ” 等等

唯独是不能传入 “false”,这个会禁用它,让按钮处于可以交互的状态。

我的疑问是:在我们自定义的组件 Button 上直接写 <Button disabled></Button>,是不是其实就是 <Button disabled={true}></Button>的简写呢,我试过直接写 disabled = “disabled”/“true” 的话 ts 会报类型错误(string 赋值给 boolean), 写 disabled = { true } 反倒是没问题。

写回答

1回答

张轩

2022-11-18

同学你好

你说的是正确的,这是 jsx 的特性,也就是说,当一个属性为 boolean 值的时候,就可以直接写这个属性名称,就等于将它设置为 true 了,可以看一下文档你就很清楚了:

https://reactjs.org/docs/jsx-in-depth.html#props-default-to-true


1
1
Neolu4ever
感谢老师,一般这种小疑问不解决的话我会纠结很久!
2022-11-18
共1条回复

React18+TS高仿AntD从零到一打造组件库

设计,开发,测试,发布再到 CI/CD,从0到1造轮子

2124 学习 · 959 问题

查看课程