记录Antd-placeholder不显示问题

最近开始使用antd组件库来开发react项目,用到select组件的时候发现和vue的有很多东西都不太一样,有个需求需要加上placeholder,一开始显示的时候是比较正常的,当后面需求需要用到value的时候,发现value一旦有值了placeholder就没有正常显示,即使是为空值的时候也不会正常显示,所以写一篇文章做个记录

需求

有值的时候,也就是组件中的 value 属性没有被设置为非空的值,显示的就是value的值

js 复制代码
const App: React.FC = () => (
  <Select
    showSearch
    placeholder="Select a person"
    optionFilterProp="children"
    value={'jack'}
    onChange={onChange}
    onSearch={onSearch}
    filterOption={filterOption}
    options={[
      {
        value: 'jack',
        label: 'Jack',
      },
      {
        value: 'lucy',
        label: 'Lucy',
      },
      {
        value: 'tom',
        label: 'Tom',
      },
    ]}
  />
);

export default App;

没有值的时候,placeholder的值会正常显示

js 复制代码
const App: React.FC = () => (
  <Select
    showSearch
    placeholder="Select a person"
    optionFilterProp="children"
    onChange={onChange}
    onSearch={onSearch}
    filterOption={filterOption}
    options={[
      {
        value: 'jack',
        label: 'Jack',
      },
      {
        value: 'lucy',
        label: 'Lucy',
      },
      {
        value: 'tom',
        label: 'Tom',
      },
    ]}
  />
);

export default App;

问题

但是会出现以下的情况,设置value为动态值,当value为空的时候,按道理是要显示placeholder的,但是没有显示,每个下拉框都是空值,当且仅仅当value={''},会出现这种问题

js 复制代码
const App: React.FC = () => (
  <Select
    showSearch
    placeholder="Select a person"
    optionFilterProp="children"
    value={''}
    onChange={onChange}
    onSearch={onSearch}
    filterOption={filterOption}
    options={[
      {
        value: 'jack',
        label: 'Jack',
      },
      {
        value: 'lucy',
        label: 'Lucy',
      },
      {
        value: 'tom',
        label: 'Tom',
      },
    ]}
  />
);

这种情况下没有value,也没有正常显示placeholder,不符合目标需求。

查找原因

在 Ant Design(antd)的 Select 组件中,placeholder 属性默认情况下是只有在没有设置任何 value 的情况下才会显示的。如果 value 不为空,那么 placeholder 不会显示。

当传入的value是null或undefined的时候,会视为value是没有值的,这情况下placeholder会正常显示处理,当如果val是""空字符串,则是为value是有值的

js 复制代码
<Select
    showSearch
    placeholder="Select a person"
    optionFilterProp="children"
    value={val}

总结

对于select的value值想要置为空值,也就是初始化的情况下,可以对value设置为null或者是undefined,如果是置为空字符串的情况下,会被组件识别为有值,就会出现select下拉框全空白的情况

如果觉得有趣或有收获,请关注我的更新,给个喜欢和分享。您的支持是我写作的最大动力!

往期好文推荐

相关推荐
拖孩7 分钟前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579007 分钟前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku17 分钟前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
桃桃乌龙_25 分钟前
LangGraph 深度解析:从链到图,把 Agent 的循环画出来
面试
奇牙coding25 分钟前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!32 分钟前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
考研保研资料分享32 分钟前
地信遥感保研至南京大学南赫:六场考核与跨专业失利复盘
面试
程序员老赵34 分钟前
Docker 部署 Filestash:轻松搭建浏览器文件管理平台
前端·docker·开源
夏天要喝冰可乐36 分钟前
给 23 万字修仙小说造个阅读站:浏览器内打包 EPUB 分页阅读 + 三主题实战
前端·产品·全栈
茶底世界之下40 分钟前
林间步道要不要加暗角?用 Awaking 把强度收在20%
前端·ios·图片资源